From 23bf260f4d2d359016254154e1dc5996d524eaca Mon Sep 17 00:00:00 2001 From: Romeo Kienzler Date: Thu, 20 Mar 2025 10:00:49 +0100 Subject: [PATCH 1/2] initial V2 Signed-off-by: Romeo Kienzler --- .travis.yml | 61 - CHANGELOG.md | 14 - MAINTAINERS.md | 71 +- Makefile | 38 - README.md | 74 +- api/README.md | 235 - api/client/.gitignore | 64 - api/client/.swagger-codegen-ignore | 27 - api/client/.swagger-codegen/VERSION | 1 - api/client/README.md | 207 - api/client/docs/AnyValue.md | 9 - api/client/docs/ApiAccessToken.md | 11 - api/client/docs/ApiAsset.md | 17 - api/client/docs/ApiCatalogUpload.md | 15 - api/client/docs/ApiCatalogUploadError.md | 13 - api/client/docs/ApiCatalogUploadItem.md | 11 - api/client/docs/ApiCatalogUploadResponse.md | 19 - api/client/docs/ApiComponent.md | 19 - api/client/docs/ApiCredential.md | 15 - api/client/docs/ApiDataset.md | 23 - api/client/docs/ApiGenerateCodeResponse.md | 10 - .../docs/ApiGenerateModelCodeResponse.md | 10 - api/client/docs/ApiGetTemplateResponse.md | 11 - api/client/docs/ApiInferenceservice.md | 13 - .../docs/ApiListCatalogItemsResponse.md | 16 - api/client/docs/ApiListCatalogUploadErrors.md | 11 - api/client/docs/ApiListComponentsResponse.md | 12 - api/client/docs/ApiListCredentialsResponse.md | 12 - api/client/docs/ApiListDatasetsResponse.md | 12 - .../docs/ApiListInferenceservicesResponse.md | 12 - .../docs/ApiListInstalledOperatorsResponse.md | 12 - api/client/docs/ApiListModelsResponse.md | 12 - api/client/docs/ApiListNotebooksResponse.md | 12 - api/client/docs/ApiListPipelinesResponse.md | 12 - api/client/docs/ApiMetadata.md | 12 - api/client/docs/ApiModel.md | 28 - api/client/docs/ApiModelFramework.md | 12 - api/client/docs/ApiModelFrameworkRuntimes.md | 11 - api/client/docs/ApiModelScript.md | 12 - api/client/docs/ApiNotebook.md | 20 - api/client/docs/ApiParameter.md | 13 - api/client/docs/ApiPipeline.md | 17 - api/client/docs/ApiPipelineCustom.md | 13 - .../docs/ApiPipelineCustomRunPayload.md | 11 - api/client/docs/ApiPipelineDAG.md | 10 - api/client/docs/ApiPipelineExtended.md | 20 - api/client/docs/ApiPipelineExtension.md | 13 - api/client/docs/ApiPipelineInputs.md | 10 - api/client/docs/ApiPipelineTask.md | 14 - api/client/docs/ApiPipelineTaskArguments.md | 10 - api/client/docs/ApiRunCodeResponse.md | 11 - api/client/docs/ApiSettings.md | 10 - api/client/docs/ApiSettingsSection.md | 12 - api/client/docs/ApiStatus.md | 12 - api/client/docs/ApiUrl.md | 10 - api/client/docs/ApplicationSettingsApi.md | 148 - api/client/docs/CatalogServiceApi.md | 154 - api/client/docs/ComponentServiceApi.md | 621 - api/client/docs/CredentialServiceApi.md | 199 - api/client/docs/DatasetServiceApi.md | 626 - api/client/docs/Dictionary.md | 9 - api/client/docs/HealthCheckApi.md | 56 - api/client/docs/InferenceServiceApi.md | 208 - api/client/docs/ModelServiceApi.md | 624 - api/client/docs/NotebookServiceApi.md | 625 - api/client/docs/PipelineServiceApi.md | 583 - api/client/docs/ProtobufAny.md | 11 - api/client/requirements.txt | 10 - api/client/setup.py | 51 - api/client/swagger_client/__init__.py | 82 - api/client/swagger_client/api/__init__.py | 18 - .../api/application_settings_api.py | 322 - .../swagger_client/api/catalog_service_api.py | 324 - .../api/component_service_api.py | 1268 - .../api/credential_service_api.py | 407 - .../swagger_client/api/dataset_service_api.py | 1264 - .../swagger_client/api/health_check_api.py | 126 - .../api/inference_service_api.py | 429 - .../swagger_client/api/model_service_api.py | 1278 - .../api/notebook_service_api.py | 1268 - .../api/pipeline_service_api.py | 1175 - api/client/swagger_client/api_client.py | 641 - api/client/swagger_client/configuration.py | 240 - api/client/swagger_client/models/__init__.py | 66 - api/client/swagger_client/models/any_value.py | 90 - .../swagger_client/models/api_access_token.py | 150 - api/client/swagger_client/models/api_asset.py | 302 - .../models/api_catalog_upload.py | 250 - .../models/api_catalog_upload_error.py | 199 - .../models/api_catalog_upload_item.py | 147 - .../models/api_catalog_upload_response.py | 352 - .../swagger_client/models/api_component.py | 358 - .../swagger_client/models/api_credential.py | 254 - .../swagger_client/models/api_dataset.py | 459 - .../models/api_generate_code_response.py | 120 - .../api_generate_model_code_response.py | 122 - .../models/api_get_template_response.py | 148 - .../models/api_inferenceservice.py | 200 - .../models/api_list_catalog_items_response.py | 274 - .../models/api_list_catalog_upload_errors.py | 144 - .../models/api_list_components_response.py | 172 - .../models/api_list_credentials_response.py | 172 - .../models/api_list_datasets_response.py | 170 - .../api_list_inferenceservices_response.py | 172 - .../models/api_list_models_response.py | 172 - .../models/api_list_notebooks_response.py | 172 - .../models/api_list_pipelines_response.py | 172 - .../swagger_client/models/api_metadata.py | 170 - api/client/swagger_client/models/api_model.py | 592 - .../models/api_model_framework.py | 173 - .../models/api_model_framework_runtimes.py | 144 - .../swagger_client/models/api_model_script.py | 179 - .../swagger_client/models/api_notebook.py | 386 - .../swagger_client/models/api_parameter.py | 199 - .../swagger_client/models/api_pipeline.py | 306 - .../models/api_pipeline_custom.py | 205 - .../models/api_pipeline_custom_run_payload.py | 147 - .../swagger_client/models/api_pipeline_dag.py | 122 - .../models/api_pipeline_extended.py | 386 - .../models/api_pipeline_extension.py | 196 - .../models/api_pipeline_inputs.py | 122 - .../models/api_pipeline_task.py | 232 - .../models/api_pipeline_task_arguments.py | 120 - .../models/api_run_code_response.py | 149 - .../swagger_client/models/api_settings.py | 123 - .../models/api_settings_section.py | 179 - .../swagger_client/models/api_status.py | 172 - api/client/swagger_client/models/api_url.py | 118 - .../swagger_client/models/dictionary.py | 92 - .../swagger_client/models/protobuf_any.py | 150 - api/client/swagger_client/rest.py | 326 - api/client/test-requirements.txt | 5 - api/client/test/__init__.py | 3 - api/client/test/test_any_value.py | 43 - api/client/test/test_api_access_token.py | 43 - api/client/test/test_api_asset.py | 43 - api/client/test/test_api_catalog_upload.py | 43 - .../test/test_api_catalog_upload_error.py | 43 - .../test/test_api_catalog_upload_item.py | 43 - .../test/test_api_catalog_upload_response.py | 43 - api/client/test/test_api_component.py | 43 - api/client/test/test_api_credential.py | 43 - api/client/test/test_api_dataset.py | 43 - .../test/test_api_generate_code_response.py | 43 - .../test_api_generate_model_code_response.py | 43 - .../test/test_api_get_template_response.py | 43 - api/client/test/test_api_inferenceservice.py | 43 - .../test_api_list_catalog_items_response.py | 43 - .../test_api_list_catalog_upload_errors.py | 43 - .../test/test_api_list_components_response.py | 43 - .../test_api_list_credentials_response.py | 43 - .../test/test_api_list_datasets_response.py | 43 - ...est_api_list_inferenceservices_response.py | 43 - .../test/test_api_list_models_response.py | 43 - .../test/test_api_list_notebooks_response.py | 43 - .../test/test_api_list_pipelines_response.py | 43 - api/client/test/test_api_metadata.py | 43 - api/client/test/test_api_model.py | 43 - api/client/test/test_api_model_framework.py | 43 - .../test/test_api_model_framework_runtimes.py | 43 - api/client/test/test_api_model_script.py | 43 - api/client/test/test_api_notebook.py | 43 - api/client/test/test_api_parameter.py | 43 - api/client/test/test_api_pipeline.py | 43 - api/client/test/test_api_pipeline_custom.py | 43 - .../test_api_pipeline_custom_run_payload.py | 43 - api/client/test/test_api_pipeline_dag.py | 43 - api/client/test/test_api_pipeline_extended.py | 43 - .../test/test_api_pipeline_extension.py | 43 - api/client/test/test_api_pipeline_inputs.py | 43 - api/client/test/test_api_pipeline_task.py | 43 - .../test/test_api_pipeline_task_arguments.py | 43 - api/client/test/test_api_run_code_response.py | 43 - api/client/test/test_api_settings.py | 43 - api/client/test/test_api_settings_section.py | 43 - api/client/test/test_api_status.py | 43 - api/client/test/test_api_url.py | 43 - .../test/test_application_settings_api.py | 55 - api/client/test/test_catalog_service_api.py | 49 - api/client/test/test_component_service_api.py | 110 - .../test/test_credential_service_api.py | 55 - api/client/test/test_dataset_service_api.py | 104 - api/client/test/test_dictionary.py | 43 - api/client/test/test_health_check_api.py | 44 - api/client/test/test_inference_service_api.py | 50 - api/client/test/test_model_service_api.py | 110 - api/client/test/test_notebook_service_api.py | 110 - api/client/test/test_pipeline_service_api.py | 92 - api/client/test/test_protobuf_any.py | 43 - api/client/tox.ini | 10 - api/codegen.sh | 212 - api/codegen_workflow.png | Bin 31384 -> 0 bytes api/deploy.sh | 215 - api/examples/catalog_api.py | 177 - api/examples/components_api.py | 382 - api/examples/credentials_api.py | 143 - api/examples/dataset_api.py | 368 - api/examples/models_api.py | 379 - api/examples/notebooks_api.py | 427 - api/examples/pipelines_api.py | 486 - api/examples/runs_api.py | 160 - api/examples/settings_api.py | 119 - api/generate_code.sh | 87 - api/requirements.txt | 10 - api/server/.dockerignore | 79 - api/server/.gitignore | 64 - api/server/.swagger-codegen-ignore | 37 - api/server/.swagger-codegen/VERSION | 1 - api/server/Dockerfile | 44 - api/server/README.md | 67 - api/server/application_settings.yaml | 78 - api/server/mlx-api.yml | 183 - api/server/requirements.in | 26 - api/server/requirements.txt | 638 - api/server/setup.py | 38 - api/server/swagger_server/__init__.py | 5 - api/server/swagger_server/__main__.py | 78 - .../code_templates/run_component.TEMPLATE.py | 55 - .../code_templates/run_dataset.TEMPLATE.py | 65 - .../code_templates/run_notebook.TEMPLATE.py | 64 - .../run_notebook_with_dataset.TEMPLATE.py | 70 - .../code_templates/run_pipeline.TEMPLATE.py | 48 - .../serve_kfserving.TEMPLATE.py | 76 - .../code_templates/serve_knative.TEMPLATE.py | 83 - .../serve_kubernetes.TEMPLATE.py | 81 - .../code_templates/train_watsonml.TEMPLATE.py | 90 - .../train_watsonml_w_credentials.TEMPLATE.py | 91 - .../swagger_server/controllers/__init__.py | 3 - .../application_settings_controller.py | 52 - .../controllers/catalog_service_controller.py | 55 - .../component_service_controller.py | 208 - .../credential_service_controller.py | 71 - .../controllers/dataset_service_controller.py | 208 - .../controllers/health_check_controller.py | 24 - .../inference_service_controller.py | 81 - .../controllers/model_service_controller.py | 212 - .../notebook_service_controller.py | 210 - .../pipeline_service_controller.py | 200 - .../controllers_impl/__init__.py | 87 - .../application_settings_controller_impl.py | 75 - .../catalog_service_controller_impl.py | 188 - .../component_service_controller_impl.py | 398 - .../credential_service_controller_impl.py | 123 - .../dataset_service_controller_impl.py | 441 - .../health_check_controller_impl.py | 37 - .../inference_service_controller_impl.py | 115 - .../model_service_controller_impl.py | 445 - .../notebook_service_controller_impl.py | 530 - .../pipeline_service_controller_impl.py | 455 - .../swagger_server/data_access/__init__.py | 3 - .../data_access/minio_client.py | 264 - .../data_access/mysql_client.py | 783 - api/server/swagger_server/encoder.py | 24 - .../swagger_server/gateways/__init__.py | 3 - .../gateways/kfserving_client.py | 83 - .../gateways/kubeflow_pipeline_service.py | 679 - .../gateways/kubernetes_service.py | 92 - api/server/swagger_server/models/__init__.py | 55 - api/server/swagger_server/models/any_value.py | 40 - .../swagger_server/models/api_access_token.py | 101 - api/server/swagger_server/models/api_asset.py | 253 - .../models/api_catalog_upload.py | 201 - .../models/api_catalog_upload_error.py | 149 - .../models/api_catalog_upload_item.py | 97 - .../models/api_catalog_upload_response.py | 302 - .../swagger_server/models/api_component.py | 307 - .../swagger_server/models/api_credential.py | 205 - .../swagger_server/models/api_dataset.py | 411 - .../models/api_generate_code_response.py | 69 - .../api_generate_model_code_response.py | 70 - .../models/api_get_template_response.py | 97 - .../models/api_inferenceservice.py | 150 - .../models/api_list_catalog_items_response.py | 228 - .../models/api_list_catalog_upload_errors.py | 94 - .../models/api_list_components_response.py | 120 - .../models/api_list_credentials_response.py | 120 - .../models/api_list_datasets_response.py | 120 - .../api_list_inferenceservices_response.py | 120 - .../models/api_list_models_response.py | 120 - .../models/api_list_notebooks_response.py | 120 - .../models/api_list_pipelines_response.py | 120 - .../swagger_server/models/api_metadata.py | 119 - api/server/swagger_server/models/api_model.py | 543 - .../models/api_model_framework.py | 122 - .../models/api_model_framework_runtimes.py | 93 - .../swagger_server/models/api_model_script.py | 131 - .../swagger_server/models/api_notebook.py | 337 - .../swagger_server/models/api_parameter.py | 148 - .../swagger_server/models/api_pipeline.py | 254 - .../models/api_pipeline_custom.py | 155 - .../models/api_pipeline_custom_run_payload.py | 95 - .../swagger_server/models/api_pipeline_dag.py | 70 - .../models/api_pipeline_extended.py | 334 - .../models/api_pipeline_extension.py | 145 - .../models/api_pipeline_inputs.py | 70 - .../models/api_pipeline_task.py | 182 - .../models/api_pipeline_task_arguments.py | 68 - .../models/api_run_code_response.py | 99 - .../swagger_server/models/api_settings.py | 72 - .../models/api_settings_section.py | 128 - .../swagger_server/models/api_status.py | 120 - api/server/swagger_server/models/api_url.py | 67 - .../swagger_server/models/base_model_.py | 75 - .../swagger_server/models/dictionary.py | 41 - .../swagger_server/models/protobuf_any.py | 101 - .../swagger_server/swagger/swagger.yaml | 3176 -- api/server/swagger_server/test/__init__.py | 19 - .../test_application_settings_controller.py | 62 - .../test/test_catalog_service_controller.py | 53 - .../test/test_component_service_controller.py | 190 - .../test_credential_service_controller.py | 59 - .../test/test_dataset_service_controller.py | 170 - .../test/test_health_check_controller.py | 35 - .../test/test_inference_service_controller.py | 48 - .../test/test_model_service_controller.py | 188 - .../test/test_notebook_service_controller.py | 186 - .../test/test_pipeline_service_controller.py | 147 - api/server/swagger_server/util.py | 301 - api/server/test-requirements.txt | 6 - api/server/tox.ini | 10 - api/swagger/swagger.yaml | 2955 -- bootstrapper/Dockerfile | 12 - bootstrapper/README.md | 12 - bootstrapper/bootstrap.yaml | 34 - bootstrapper/catalog_upload.json | 196 - bootstrapper/configmap.yaml | 162 - bootstrapper/start.py | 171 - components/README.md | 27 - components/template.yaml | 19 - dashboard/origin-mlx/.dockerignore | 1 - dashboard/origin-mlx/Dockerfile | 38 - dashboard/origin-mlx/README.md | 226 - dashboard/origin-mlx/developer-guide.md | 74 - dashboard/origin-mlx/mlx-ui.yaml | 137 - dashboard/origin-mlx/nbviewer-enterprise.yaml | 49 - dashboard/origin-mlx/package-lock.json | 37994 ---------------- dashboard/origin-mlx/package.json | 62 - .../origin-mlx/public/dashboard_lib.bundle.js | 2 - .../public/dashboard_lib.bundle.js.map | 1 - dashboard/origin-mlx/public/index.html | 47 - dashboard/origin-mlx/public/manifest.json | 15 - .../origin-mlx/public/mlx-logo-white.png | Bin 35255 -> 0 bytes dashboard/origin-mlx/server/package-lock.json | 4310 -- dashboard/origin-mlx/server/package.json | 26 - dashboard/origin-mlx/server/server.ts | 236 - dashboard/origin-mlx/server/users.ts | 32 - dashboard/origin-mlx/src/App.css | 38 - dashboard/origin-mlx/src/App.test.tsx | 14 - dashboard/origin-mlx/src/App.tsx | 473 - dashboard/origin-mlx/src/CSSReset.tsx | 57 - dashboard/origin-mlx/src/Css.test.tsx | 43 - dashboard/origin-mlx/src/Css.tsx | 381 - .../src/components/Button/Button.tsx | 14 - .../components/Button/ButtonWithTooltip.tsx | 23 - .../src/components/Button/index.tsx | 10 - .../origin-mlx/src/components/DataList.tsx | 48 - .../src/components/DataListItem.tsx | 205 - .../src/components/Detail/ComponentDetail.tsx | 192 - .../src/components/Detail/DatasetDetail.tsx | 139 - .../src/components/Detail/KFServingDetail.tsx | 417 - .../src/components/Detail/ModelDetail.tsx | 238 - .../src/components/Detail/NotebookDetail.tsx | 163 - .../src/components/Detail/OperatorDetail.tsx | 134 - .../src/components/Detail/PipelineDetail.tsx | 195 - dashboard/origin-mlx/src/components/Graph.tsx | 413 - dashboard/origin-mlx/src/components/Hero.tsx | 79 - dashboard/origin-mlx/src/components/Link.tsx | 19 - .../src/components/LoadingMessage.tsx | 38 - .../src/components/MarkdownViewer.tsx | 33 - .../src/components/MetadataView.tsx | 43 - .../origin-mlx/src/components/PageFooter.tsx | 22 - .../src/components/PipelineDetailGraph.tsx | 272 - .../src/components/RelatedAssetView.tsx | 134 - .../origin-mlx/src/components/Rotate.tsx | 30 - .../src/components/RunView/ModelRunView.tsx | 313 - .../src/components/RunView/RunView.tsx | 279 - .../src/components/RunView/index.ts | 8 - .../origin-mlx/src/components/SecretMenu.tsx | 63 - .../src/components/Sidebar/SideBarHeader.tsx | 30 - .../src/components/Sidebar/Sidebar.tsx | 42 - .../src/components/Sidebar/SidebarList.tsx | 157 - .../components/Sidebar/SidebarListItem.tsx | 63 - .../src/components/Sidebar/index.ts | 6 - .../src/components/SourceCodeDisplay.tsx | 57 - .../src/components/StaticGraphParser.tsx | 149 - .../src/components/Tooltip/Tooltip.tsx | 61 - .../src/components/UploadButton.tsx | 189 - .../src/components/WorkflowParser.tsx | 401 - dashboard/origin-mlx/src/icons/codaitLogo.tsx | 71 - .../origin-mlx/src/icons/experiments.tsx | 35 - .../origin-mlx/src/icons/kubeflowLogo.tsx | 79 - dashboard/origin-mlx/src/icons/pipelines.tsx | 42 - .../origin-mlx/src/icons/statusRunning.tsx | 32 - .../origin-mlx/src/icons/statusTerminated.tsx | 30 - .../origin-mlx/src/images/cancel-outline.png | Bin 17708 -> 0 bytes dashboard/origin-mlx/src/images/cancel.png | Bin 4468 -> 0 bytes .../src/images/checkmark-outline.png | Bin 8085 -> 0 bytes dashboard/origin-mlx/src/images/checkmark.png | Bin 3018 -> 0 bytes dashboard/origin-mlx/src/images/close.png | Bin 16799 -> 0 bytes dashboard/origin-mlx/src/images/error.png | Bin 21116 -> 0 bytes .../origin-mlx/src/images/explainer-icon.png | Bin 1469 -> 0 bytes .../origin-mlx/src/images/graph-dashboard.png | Bin 9564 -> 0 bytes dashboard/origin-mlx/src/images/image1.png | Bin 280687 -> 0 bytes dashboard/origin-mlx/src/images/image2.png | Bin 212140 -> 0 bytes .../origin-mlx/src/images/indicator-gif.gif | Bin 3539 -> 0 bytes .../origin-mlx/src/images/istio-boat.png | Bin 8511 -> 0 bytes dashboard/origin-mlx/src/images/k8s-logo.png | Bin 27869 -> 0 bytes .../origin-mlx/src/images/keras-logo.png | Bin 13949 -> 0 bytes .../origin-mlx/src/images/knative-logo.png | Bin 16467 -> 0 bytes .../origin-mlx/src/images/kubeflow-logo.png | Bin 105215 -> 0 bytes .../origin-mlx/src/images/landing-page.png | Bin 2884451 -> 0 bytes dashboard/origin-mlx/src/images/lfaidata.png | Bin 34264 -> 0 bytes .../src/images/mlx-logo-name-white.png | Bin 58004 -> 0 bytes .../origin-mlx/src/images/mlx-logo-white.png | Bin 35255 -> 0 bytes .../src/images/monitoring-dashboard.png | Bin 2814 -> 0 bytes .../origin-mlx/src/images/predictor-icon.png | Bin 1662 -> 0 bytes .../origin-mlx/src/images/pytorch-logo.png | Bin 6742 -> 0 bytes .../src/images/scikit-learn-logo.png | Bin 48320 -> 0 bytes dashboard/origin-mlx/src/images/tf-logo.png | Bin 90385 -> 0 bytes .../src/images/transformer-icon.png | Bin 1412 -> 0 bytes .../origin-mlx/src/images/update-icon.png | Bin 12595 -> 0 bytes .../origin-mlx/src/images/vertical-line.png | Bin 2806 -> 0 bytes dashboard/origin-mlx/src/index.css | 24 - dashboard/origin-mlx/src/index.tsx | 17 - dashboard/origin-mlx/src/lib/api/artifacts.ts | 162 - dashboard/origin-mlx/src/lib/api/run.ts | 58 - dashboard/origin-mlx/src/lib/api/settings.ts | 80 - dashboard/origin-mlx/src/lib/api/types.ts | 23 - dashboard/origin-mlx/src/lib/api/upload.ts | 76 - .../origin-mlx/src/lib/stores/artifacts.ts | 85 - .../origin-mlx/src/lib/stores/context.tsx | 45 - dashboard/origin-mlx/src/lib/stores/pages.ts | 37 - .../origin-mlx/src/lib/stores/pipeline.ts | 95 - .../origin-mlx/src/lib/stores/reducer.ts | 25 - .../origin-mlx/src/lib/stores/settings.ts | 153 - dashboard/origin-mlx/src/lib/stores/types.ts | 16 - dashboard/origin-mlx/src/lib/stores/util.ts | 22 - dashboard/origin-mlx/src/lib/util.ts | 58 - dashboard/origin-mlx/src/logo.svg | 7 - dashboard/origin-mlx/src/mock/NotebookData.ts | 93 - dashboard/origin-mlx/src/mock/OpDetailData.ts | 1158 - dashboard/origin-mlx/src/mock/OperatorData.ts | 37 - dashboard/origin-mlx/src/mock/PipelineData.ts | 77 - dashboard/origin-mlx/src/mock/SampleGraph.ts | 590 - dashboard/origin-mlx/src/mock/SampleGraph2.ts | 145 - dashboard/origin-mlx/src/mock/UploadedData.ts | 49 - .../origin-mlx/src/pages/Default404Page.tsx | 31 - .../src/pages/ExternalLinksPage.tsx | 40 - dashboard/origin-mlx/src/pages/IframePage.tsx | 108 - .../origin-mlx/src/pages/KFServingAllPage.tsx | 322 - .../src/pages/KFServingDetailPage.tsx | 127 - .../KFServingFeaturedPage/KFServingCard.tsx | 149 - .../KFServingFeatured.tsx | 114 - .../KFServingFeaturedPage.tsx | 147 - .../src/pages/KFServingFeaturedPage/index.ts | 5 - .../src/pages/KFServingUploadPage.tsx | 161 - .../origin-mlx/src/pages/LandingPage.tsx | 54 - .../origin-mlx/src/pages/MetaAllPage.tsx | 340 - .../origin-mlx/src/pages/MetaDeletePage.tsx | 188 - .../origin-mlx/src/pages/MetaDetailPage.tsx | 164 - .../src/pages/MetaFeaturedPage/MetaCard.tsx | 152 - .../pages/MetaFeaturedPage/MetaFeatured.tsx | 103 - .../MetaFeaturedPage/MetaFeaturedPage.tsx | 202 - .../src/pages/MetaFeaturedPage/index.ts | 5 - .../origin-mlx/src/pages/SettingsPage.tsx | 409 - dashboard/origin-mlx/src/pages/UploadPage.tsx | 234 - dashboard/origin-mlx/src/react-app-env.d.ts | 4 - dashboard/origin-mlx/src/serviceWorker.ts | 146 - dashboard/origin-mlx/src/styles/Graph.css | 27 - dashboard/origin-mlx/src/styles/Models.css | 1114 - dashboard/origin-mlx/src/styles/Sidebar.css | 201 - dashboard/origin-mlx/tsconfig.json | 26 - datasets/README.md | 131 - docs/README.md | 14 - docs/images/CatalogImport.png | Bin 922080 -> 0 bytes docs/images/LandingPage.png | Bin 1458616 -> 0 bytes docs/images/catalogsource.jpg | Bin 66363 -> 0 bytes docs/images/mlx-architecture-2.png | Bin 445273 -> 0 bytes docs/images/mlx-architecture-4.png | Bin 474122 -> 0 bytes docs/images/mlx-ui-diagram.png | Bin 37751 -> 0 bytes docs/images/mlx.png | Bin 2884451 -> 0 bytes .../models-workshop/create-OCP-route.png | Bin 298526 -> 0 bytes .../images/models-workshop/register-model.png | Bin 879241 -> 0 bytes .../models-workshop/upload-model-yaml.png | Bin 1094985 -> 0 bytes .../models-workshop/view-all-models.png | Bin 667180 -> 0 bytes docs/images/olm-1.png | Bin 25875 -> 0 bytes docs/images/olm-2.png | Bin 18448 -> 0 bytes docs/images/ui-folder-tree.png | Bin 116747 -> 0 bytes .../workshop/Datasets-featured-page.png | Bin 1114118 -> 0 bytes docs/images/workshop/Datasets-launch.png | Bin 1046429 -> 0 bytes .../workshop/Datasets-output-PVC-name.png | Bin 2816373 -> 0 bytes .../workshop/Datasets-related-assets.png | Bin 1058621 -> 0 bytes docs/images/workshop/Datasets-run-graph.png | Bin 1116673 -> 0 bytes docs/images/workshop/Models-Swagger-UI.png | Bin 444053 -> 0 bytes docs/images/workshop/Models-featured-page.png | Bin 1183393 -> 0 bytes docs/images/workshop/Models-launch.png | Bin 1081834 -> 0 bytes .../Models-predict-open-source-file.png | Bin 699606 -> 0 bytes docs/images/workshop/Models-run-output.png | Bin 1180317 -> 0 bytes .../workshop/Notebooks-featured-page.png | Bin 1113462 -> 0 bytes ...Notebooks-language-classification-test.png | Bin 67021 -> 0 bytes docs/images/workshop/Notebooks-launch.png | Bin 1327191 -> 0 bytes docs/images/workshop/Notebooks-run-graph.png | Bin 1269941 -> 0 bytes docs/images/workshop/Notebooks-run-logs.png | Bin 1370927 -> 0 bytes docs/import-assets.md | 19 - docs/install-mlx-on-kind.md | 128 - docs/install-mlx-on-kubeflow.md | 41 - docs/mlx-install-operator.md | 64 - docs/mlx-install-with-kubeflow.md | 66 - docs/mlx-models-workshop.md | 276 - docs/mlx-read-only-deployment.md | 14 - docs/mlx-setup.md | 99 - docs/mlx-workshop.md | 257 - docs/troubleshooting.md | 31 - docs/usage-steps.md | 31 - hack/olm-console.yaml | 68 - manifests/base/kustomization.yaml | 11 - manifests/base/mlx-api-vs.yaml | 26 - .../base/mlx-deployments/kustomization.yaml | 8 - manifests/base/mlx-deployments/mlx-api.yaml | 98 - manifests/base/mlx-deployments/mlx-ui.yaml | 93 - manifests/base/mlx-profile.yaml | 12 - manifests/base/mlx-ui-vs.yaml | 25 - manifests/istio-auth/istio-configmap.yaml | 40 - manifests/istio-auth/kustomization.yaml | 15 - .../istio-auth/ml-pipeline-api-auth.yaml | 28 - manifests/istio-auth/mlx-api-auth.yaml | 51 - manifests/istio-auth/mlx-api-patch.yaml | 24 - manifests/istio-auth/mlx-ext-authz.yaml | 23 - manifests/istio-auth/mlx-ui-auth.yaml | 28 - manifests/istio-auth/mysql-auth.yaml | 25 - .../nbviewer-enterprise/kustomization.yaml | 6 - .../nbviewer-enterprise.yaml | 49 - .../prod-multi-user/envoy-filter-patch.yaml | 12 - .../kubeflow-dashboard-patch.yaml | 25 - manifests/prod-multi-user/kustomization.yaml | 14 - .../prod-multi-user/mlx-ext-authz-patch.yaml | 47 - manifests/prod-multi-user/mlx-ui-patch.yaml | 83 - manifests/prod-multi-user/oidc-patch.yaml | 27 - manifests/read-only-k8s/config.yaml | 37 - manifests/read-only-k8s/init-jobs.yaml | 65 - manifests/read-only-k8s/k8s-ingress.yaml | 27 - manifests/read-only-k8s/kustomization.yaml | 33 - manifests/read-only-k8s/minio.yaml | 101 - manifests/read-only-k8s/mlx-api-patch.yaml | 18 - manifests/read-only-k8s/mlx-ui-patch.yaml | 20 - manifests/read-only-k8s/mysql.yaml | 105 - manifests/read-only-k8s/namespace.yaml | 7 - manifests/read-only-k8s/params.yaml | 12 - mlx/cos_backend.py | 78 + models/README.md | 130 - models/template.yaml | 225 - models/template/archive/data.yaml | 22 - models/template/archive/model_old.yaml | 207 - models/template/archive/onnx_convert.yaml | 23 - notebooks/README.md | 26 - notebooks/template.yaml | 13 - pipelines/README.md | 39 - quickstart/README.md | 142 - quickstart/docker-compose.yaml | 129 - schema/dataset.json | 13 + schema/model.json | 13 + schema/notebook.json | 12 + schema/pipeline.json | 14 + schema/pipeline_operator.json | 11 + tools/bash/add_license_headers.sh | 87 - tools/bash/check_diff.sh | 46 - tools/bash/mdtoc.sh | 30 - .../python/regenerate_catalog_upload_json.py | 103 - tools/python/update_doc_table.py | 87 - tools/python/verify_doc_links.py | 202 - tools/python/verify_npm_packages.py | 110 - 571 files changed, 152 insertions(+), 114583 deletions(-) delete mode 100644 .travis.yml delete mode 100644 CHANGELOG.md delete mode 100644 Makefile delete mode 100644 api/README.md delete mode 100644 api/client/.gitignore delete mode 100644 api/client/.swagger-codegen-ignore delete mode 100644 api/client/.swagger-codegen/VERSION delete mode 100644 api/client/README.md delete mode 100644 api/client/docs/AnyValue.md delete mode 100644 api/client/docs/ApiAccessToken.md delete mode 100644 api/client/docs/ApiAsset.md delete mode 100644 api/client/docs/ApiCatalogUpload.md delete mode 100644 api/client/docs/ApiCatalogUploadError.md delete mode 100644 api/client/docs/ApiCatalogUploadItem.md delete mode 100644 api/client/docs/ApiCatalogUploadResponse.md delete mode 100644 api/client/docs/ApiComponent.md delete mode 100644 api/client/docs/ApiCredential.md delete mode 100644 api/client/docs/ApiDataset.md delete mode 100644 api/client/docs/ApiGenerateCodeResponse.md delete mode 100644 api/client/docs/ApiGenerateModelCodeResponse.md delete mode 100644 api/client/docs/ApiGetTemplateResponse.md delete mode 100644 api/client/docs/ApiInferenceservice.md delete mode 100644 api/client/docs/ApiListCatalogItemsResponse.md delete mode 100644 api/client/docs/ApiListCatalogUploadErrors.md delete mode 100644 api/client/docs/ApiListComponentsResponse.md delete mode 100644 api/client/docs/ApiListCredentialsResponse.md delete mode 100644 api/client/docs/ApiListDatasetsResponse.md delete mode 100644 api/client/docs/ApiListInferenceservicesResponse.md delete mode 100644 api/client/docs/ApiListInstalledOperatorsResponse.md delete mode 100644 api/client/docs/ApiListModelsResponse.md delete mode 100644 api/client/docs/ApiListNotebooksResponse.md delete mode 100644 api/client/docs/ApiListPipelinesResponse.md delete mode 100644 api/client/docs/ApiMetadata.md delete mode 100644 api/client/docs/ApiModel.md delete mode 100644 api/client/docs/ApiModelFramework.md delete mode 100644 api/client/docs/ApiModelFrameworkRuntimes.md delete mode 100644 api/client/docs/ApiModelScript.md delete mode 100644 api/client/docs/ApiNotebook.md delete mode 100644 api/client/docs/ApiParameter.md delete mode 100644 api/client/docs/ApiPipeline.md delete mode 100644 api/client/docs/ApiPipelineCustom.md delete mode 100644 api/client/docs/ApiPipelineCustomRunPayload.md delete mode 100644 api/client/docs/ApiPipelineDAG.md delete mode 100644 api/client/docs/ApiPipelineExtended.md delete mode 100644 api/client/docs/ApiPipelineExtension.md delete mode 100644 api/client/docs/ApiPipelineInputs.md delete mode 100644 api/client/docs/ApiPipelineTask.md delete mode 100644 api/client/docs/ApiPipelineTaskArguments.md delete mode 100644 api/client/docs/ApiRunCodeResponse.md delete mode 100644 api/client/docs/ApiSettings.md delete mode 100644 api/client/docs/ApiSettingsSection.md delete mode 100644 api/client/docs/ApiStatus.md delete mode 100644 api/client/docs/ApiUrl.md delete mode 100644 api/client/docs/ApplicationSettingsApi.md delete mode 100644 api/client/docs/CatalogServiceApi.md delete mode 100644 api/client/docs/ComponentServiceApi.md delete mode 100644 api/client/docs/CredentialServiceApi.md delete mode 100644 api/client/docs/DatasetServiceApi.md delete mode 100644 api/client/docs/Dictionary.md delete mode 100644 api/client/docs/HealthCheckApi.md delete mode 100644 api/client/docs/InferenceServiceApi.md delete mode 100644 api/client/docs/ModelServiceApi.md delete mode 100644 api/client/docs/NotebookServiceApi.md delete mode 100644 api/client/docs/PipelineServiceApi.md delete mode 100644 api/client/docs/ProtobufAny.md delete mode 100644 api/client/requirements.txt delete mode 100644 api/client/setup.py delete mode 100644 api/client/swagger_client/__init__.py delete mode 100644 api/client/swagger_client/api/__init__.py delete mode 100644 api/client/swagger_client/api/application_settings_api.py delete mode 100644 api/client/swagger_client/api/catalog_service_api.py delete mode 100644 api/client/swagger_client/api/component_service_api.py delete mode 100644 api/client/swagger_client/api/credential_service_api.py delete mode 100644 api/client/swagger_client/api/dataset_service_api.py delete mode 100644 api/client/swagger_client/api/health_check_api.py delete mode 100644 api/client/swagger_client/api/inference_service_api.py delete mode 100644 api/client/swagger_client/api/model_service_api.py delete mode 100644 api/client/swagger_client/api/notebook_service_api.py delete mode 100644 api/client/swagger_client/api/pipeline_service_api.py delete mode 100644 api/client/swagger_client/api_client.py delete mode 100644 api/client/swagger_client/configuration.py delete mode 100644 api/client/swagger_client/models/__init__.py delete mode 100644 api/client/swagger_client/models/any_value.py delete mode 100644 api/client/swagger_client/models/api_access_token.py delete mode 100644 api/client/swagger_client/models/api_asset.py delete mode 100644 api/client/swagger_client/models/api_catalog_upload.py delete mode 100644 api/client/swagger_client/models/api_catalog_upload_error.py delete mode 100644 api/client/swagger_client/models/api_catalog_upload_item.py delete mode 100644 api/client/swagger_client/models/api_catalog_upload_response.py delete mode 100644 api/client/swagger_client/models/api_component.py delete mode 100644 api/client/swagger_client/models/api_credential.py delete mode 100644 api/client/swagger_client/models/api_dataset.py delete mode 100644 api/client/swagger_client/models/api_generate_code_response.py delete mode 100644 api/client/swagger_client/models/api_generate_model_code_response.py delete mode 100644 api/client/swagger_client/models/api_get_template_response.py delete mode 100644 api/client/swagger_client/models/api_inferenceservice.py delete mode 100644 api/client/swagger_client/models/api_list_catalog_items_response.py delete mode 100644 api/client/swagger_client/models/api_list_catalog_upload_errors.py delete mode 100644 api/client/swagger_client/models/api_list_components_response.py delete mode 100644 api/client/swagger_client/models/api_list_credentials_response.py delete mode 100644 api/client/swagger_client/models/api_list_datasets_response.py delete mode 100644 api/client/swagger_client/models/api_list_inferenceservices_response.py delete mode 100644 api/client/swagger_client/models/api_list_models_response.py delete mode 100644 api/client/swagger_client/models/api_list_notebooks_response.py delete mode 100644 api/client/swagger_client/models/api_list_pipelines_response.py delete mode 100644 api/client/swagger_client/models/api_metadata.py delete mode 100644 api/client/swagger_client/models/api_model.py delete mode 100644 api/client/swagger_client/models/api_model_framework.py delete mode 100644 api/client/swagger_client/models/api_model_framework_runtimes.py delete mode 100644 api/client/swagger_client/models/api_model_script.py delete mode 100644 api/client/swagger_client/models/api_notebook.py delete mode 100644 api/client/swagger_client/models/api_parameter.py delete mode 100644 api/client/swagger_client/models/api_pipeline.py delete mode 100644 api/client/swagger_client/models/api_pipeline_custom.py delete mode 100644 api/client/swagger_client/models/api_pipeline_custom_run_payload.py delete mode 100644 api/client/swagger_client/models/api_pipeline_dag.py delete mode 100644 api/client/swagger_client/models/api_pipeline_extended.py delete mode 100644 api/client/swagger_client/models/api_pipeline_extension.py delete mode 100644 api/client/swagger_client/models/api_pipeline_inputs.py delete mode 100644 api/client/swagger_client/models/api_pipeline_task.py delete mode 100644 api/client/swagger_client/models/api_pipeline_task_arguments.py delete mode 100644 api/client/swagger_client/models/api_run_code_response.py delete mode 100644 api/client/swagger_client/models/api_settings.py delete mode 100644 api/client/swagger_client/models/api_settings_section.py delete mode 100644 api/client/swagger_client/models/api_status.py delete mode 100644 api/client/swagger_client/models/api_url.py delete mode 100644 api/client/swagger_client/models/dictionary.py delete mode 100644 api/client/swagger_client/models/protobuf_any.py delete mode 100644 api/client/swagger_client/rest.py delete mode 100644 api/client/test-requirements.txt delete mode 100644 api/client/test/__init__.py delete mode 100644 api/client/test/test_any_value.py delete mode 100644 api/client/test/test_api_access_token.py delete mode 100644 api/client/test/test_api_asset.py delete mode 100644 api/client/test/test_api_catalog_upload.py delete mode 100644 api/client/test/test_api_catalog_upload_error.py delete mode 100644 api/client/test/test_api_catalog_upload_item.py delete mode 100644 api/client/test/test_api_catalog_upload_response.py delete mode 100644 api/client/test/test_api_component.py delete mode 100644 api/client/test/test_api_credential.py delete mode 100644 api/client/test/test_api_dataset.py delete mode 100644 api/client/test/test_api_generate_code_response.py delete mode 100644 api/client/test/test_api_generate_model_code_response.py delete mode 100644 api/client/test/test_api_get_template_response.py delete mode 100644 api/client/test/test_api_inferenceservice.py delete mode 100644 api/client/test/test_api_list_catalog_items_response.py delete mode 100644 api/client/test/test_api_list_catalog_upload_errors.py delete mode 100644 api/client/test/test_api_list_components_response.py delete mode 100644 api/client/test/test_api_list_credentials_response.py delete mode 100644 api/client/test/test_api_list_datasets_response.py delete mode 100644 api/client/test/test_api_list_inferenceservices_response.py delete mode 100644 api/client/test/test_api_list_models_response.py delete mode 100644 api/client/test/test_api_list_notebooks_response.py delete mode 100644 api/client/test/test_api_list_pipelines_response.py delete mode 100644 api/client/test/test_api_metadata.py delete mode 100644 api/client/test/test_api_model.py delete mode 100644 api/client/test/test_api_model_framework.py delete mode 100644 api/client/test/test_api_model_framework_runtimes.py delete mode 100644 api/client/test/test_api_model_script.py delete mode 100644 api/client/test/test_api_notebook.py delete mode 100644 api/client/test/test_api_parameter.py delete mode 100644 api/client/test/test_api_pipeline.py delete mode 100644 api/client/test/test_api_pipeline_custom.py delete mode 100644 api/client/test/test_api_pipeline_custom_run_payload.py delete mode 100644 api/client/test/test_api_pipeline_dag.py delete mode 100644 api/client/test/test_api_pipeline_extended.py delete mode 100644 api/client/test/test_api_pipeline_extension.py delete mode 100644 api/client/test/test_api_pipeline_inputs.py delete mode 100644 api/client/test/test_api_pipeline_task.py delete mode 100644 api/client/test/test_api_pipeline_task_arguments.py delete mode 100644 api/client/test/test_api_run_code_response.py delete mode 100644 api/client/test/test_api_settings.py delete mode 100644 api/client/test/test_api_settings_section.py delete mode 100644 api/client/test/test_api_status.py delete mode 100644 api/client/test/test_api_url.py delete mode 100644 api/client/test/test_application_settings_api.py delete mode 100644 api/client/test/test_catalog_service_api.py delete mode 100644 api/client/test/test_component_service_api.py delete mode 100644 api/client/test/test_credential_service_api.py delete mode 100644 api/client/test/test_dataset_service_api.py delete mode 100644 api/client/test/test_dictionary.py delete mode 100644 api/client/test/test_health_check_api.py delete mode 100644 api/client/test/test_inference_service_api.py delete mode 100644 api/client/test/test_model_service_api.py delete mode 100644 api/client/test/test_notebook_service_api.py delete mode 100644 api/client/test/test_pipeline_service_api.py delete mode 100644 api/client/test/test_protobuf_any.py delete mode 100644 api/client/tox.ini delete mode 100755 api/codegen.sh delete mode 100644 api/codegen_workflow.png delete mode 100755 api/deploy.sh delete mode 100644 api/examples/catalog_api.py delete mode 100644 api/examples/components_api.py delete mode 100644 api/examples/credentials_api.py delete mode 100644 api/examples/dataset_api.py delete mode 100644 api/examples/models_api.py delete mode 100644 api/examples/notebooks_api.py delete mode 100644 api/examples/pipelines_api.py delete mode 100644 api/examples/runs_api.py delete mode 100644 api/examples/settings_api.py delete mode 100755 api/generate_code.sh delete mode 100644 api/requirements.txt delete mode 100644 api/server/.dockerignore delete mode 100644 api/server/.gitignore delete mode 100644 api/server/.swagger-codegen-ignore delete mode 100644 api/server/.swagger-codegen/VERSION delete mode 100644 api/server/Dockerfile delete mode 100644 api/server/README.md delete mode 100644 api/server/application_settings.yaml delete mode 100644 api/server/mlx-api.yml delete mode 100644 api/server/requirements.in delete mode 100644 api/server/requirements.txt delete mode 100644 api/server/setup.py delete mode 100644 api/server/swagger_server/__init__.py delete mode 100644 api/server/swagger_server/__main__.py delete mode 100644 api/server/swagger_server/code_templates/run_component.TEMPLATE.py delete mode 100644 api/server/swagger_server/code_templates/run_dataset.TEMPLATE.py delete mode 100644 api/server/swagger_server/code_templates/run_notebook.TEMPLATE.py delete mode 100644 api/server/swagger_server/code_templates/run_notebook_with_dataset.TEMPLATE.py delete mode 100644 api/server/swagger_server/code_templates/run_pipeline.TEMPLATE.py delete mode 100644 api/server/swagger_server/code_templates/serve_kfserving.TEMPLATE.py delete mode 100644 api/server/swagger_server/code_templates/serve_knative.TEMPLATE.py delete mode 100644 api/server/swagger_server/code_templates/serve_kubernetes.TEMPLATE.py delete mode 100644 api/server/swagger_server/code_templates/train_watsonml.TEMPLATE.py delete mode 100644 api/server/swagger_server/code_templates/train_watsonml_w_credentials.TEMPLATE.py delete mode 100644 api/server/swagger_server/controllers/__init__.py delete mode 100644 api/server/swagger_server/controllers/application_settings_controller.py delete mode 100644 api/server/swagger_server/controllers/catalog_service_controller.py delete mode 100644 api/server/swagger_server/controllers/component_service_controller.py delete mode 100644 api/server/swagger_server/controllers/credential_service_controller.py delete mode 100644 api/server/swagger_server/controllers/dataset_service_controller.py delete mode 100644 api/server/swagger_server/controllers/health_check_controller.py delete mode 100644 api/server/swagger_server/controllers/inference_service_controller.py delete mode 100644 api/server/swagger_server/controllers/model_service_controller.py delete mode 100644 api/server/swagger_server/controllers/notebook_service_controller.py delete mode 100644 api/server/swagger_server/controllers/pipeline_service_controller.py delete mode 100644 api/server/swagger_server/controllers_impl/__init__.py delete mode 100644 api/server/swagger_server/controllers_impl/application_settings_controller_impl.py delete mode 100644 api/server/swagger_server/controllers_impl/catalog_service_controller_impl.py delete mode 100644 api/server/swagger_server/controllers_impl/component_service_controller_impl.py delete mode 100644 api/server/swagger_server/controllers_impl/credential_service_controller_impl.py delete mode 100644 api/server/swagger_server/controllers_impl/dataset_service_controller_impl.py delete mode 100644 api/server/swagger_server/controllers_impl/health_check_controller_impl.py delete mode 100644 api/server/swagger_server/controllers_impl/inference_service_controller_impl.py delete mode 100644 api/server/swagger_server/controllers_impl/model_service_controller_impl.py delete mode 100644 api/server/swagger_server/controllers_impl/notebook_service_controller_impl.py delete mode 100644 api/server/swagger_server/controllers_impl/pipeline_service_controller_impl.py delete mode 100644 api/server/swagger_server/data_access/__init__.py delete mode 100644 api/server/swagger_server/data_access/minio_client.py delete mode 100644 api/server/swagger_server/data_access/mysql_client.py delete mode 100644 api/server/swagger_server/encoder.py delete mode 100644 api/server/swagger_server/gateways/__init__.py delete mode 100644 api/server/swagger_server/gateways/kfserving_client.py delete mode 100644 api/server/swagger_server/gateways/kubeflow_pipeline_service.py delete mode 100644 api/server/swagger_server/gateways/kubernetes_service.py delete mode 100644 api/server/swagger_server/models/__init__.py delete mode 100644 api/server/swagger_server/models/any_value.py delete mode 100644 api/server/swagger_server/models/api_access_token.py delete mode 100644 api/server/swagger_server/models/api_asset.py delete mode 100644 api/server/swagger_server/models/api_catalog_upload.py delete mode 100644 api/server/swagger_server/models/api_catalog_upload_error.py delete mode 100644 api/server/swagger_server/models/api_catalog_upload_item.py delete mode 100644 api/server/swagger_server/models/api_catalog_upload_response.py delete mode 100644 api/server/swagger_server/models/api_component.py delete mode 100644 api/server/swagger_server/models/api_credential.py delete mode 100644 api/server/swagger_server/models/api_dataset.py delete mode 100644 api/server/swagger_server/models/api_generate_code_response.py delete mode 100644 api/server/swagger_server/models/api_generate_model_code_response.py delete mode 100644 api/server/swagger_server/models/api_get_template_response.py delete mode 100644 api/server/swagger_server/models/api_inferenceservice.py delete mode 100644 api/server/swagger_server/models/api_list_catalog_items_response.py delete mode 100644 api/server/swagger_server/models/api_list_catalog_upload_errors.py delete mode 100644 api/server/swagger_server/models/api_list_components_response.py delete mode 100644 api/server/swagger_server/models/api_list_credentials_response.py delete mode 100644 api/server/swagger_server/models/api_list_datasets_response.py delete mode 100644 api/server/swagger_server/models/api_list_inferenceservices_response.py delete mode 100644 api/server/swagger_server/models/api_list_models_response.py delete mode 100644 api/server/swagger_server/models/api_list_notebooks_response.py delete mode 100644 api/server/swagger_server/models/api_list_pipelines_response.py delete mode 100644 api/server/swagger_server/models/api_metadata.py delete mode 100644 api/server/swagger_server/models/api_model.py delete mode 100644 api/server/swagger_server/models/api_model_framework.py delete mode 100644 api/server/swagger_server/models/api_model_framework_runtimes.py delete mode 100644 api/server/swagger_server/models/api_model_script.py delete mode 100644 api/server/swagger_server/models/api_notebook.py delete mode 100644 api/server/swagger_server/models/api_parameter.py delete mode 100644 api/server/swagger_server/models/api_pipeline.py delete mode 100644 api/server/swagger_server/models/api_pipeline_custom.py delete mode 100644 api/server/swagger_server/models/api_pipeline_custom_run_payload.py delete mode 100644 api/server/swagger_server/models/api_pipeline_dag.py delete mode 100644 api/server/swagger_server/models/api_pipeline_extended.py delete mode 100644 api/server/swagger_server/models/api_pipeline_extension.py delete mode 100644 api/server/swagger_server/models/api_pipeline_inputs.py delete mode 100644 api/server/swagger_server/models/api_pipeline_task.py delete mode 100644 api/server/swagger_server/models/api_pipeline_task_arguments.py delete mode 100644 api/server/swagger_server/models/api_run_code_response.py delete mode 100644 api/server/swagger_server/models/api_settings.py delete mode 100644 api/server/swagger_server/models/api_settings_section.py delete mode 100644 api/server/swagger_server/models/api_status.py delete mode 100644 api/server/swagger_server/models/api_url.py delete mode 100644 api/server/swagger_server/models/base_model_.py delete mode 100644 api/server/swagger_server/models/dictionary.py delete mode 100644 api/server/swagger_server/models/protobuf_any.py delete mode 100644 api/server/swagger_server/swagger/swagger.yaml delete mode 100644 api/server/swagger_server/test/__init__.py delete mode 100644 api/server/swagger_server/test/test_application_settings_controller.py delete mode 100644 api/server/swagger_server/test/test_catalog_service_controller.py delete mode 100644 api/server/swagger_server/test/test_component_service_controller.py delete mode 100644 api/server/swagger_server/test/test_credential_service_controller.py delete mode 100644 api/server/swagger_server/test/test_dataset_service_controller.py delete mode 100644 api/server/swagger_server/test/test_health_check_controller.py delete mode 100644 api/server/swagger_server/test/test_inference_service_controller.py delete mode 100644 api/server/swagger_server/test/test_model_service_controller.py delete mode 100644 api/server/swagger_server/test/test_notebook_service_controller.py delete mode 100644 api/server/swagger_server/test/test_pipeline_service_controller.py delete mode 100644 api/server/swagger_server/util.py delete mode 100644 api/server/test-requirements.txt delete mode 100644 api/server/tox.ini delete mode 100644 api/swagger/swagger.yaml delete mode 100644 bootstrapper/Dockerfile delete mode 100644 bootstrapper/README.md delete mode 100644 bootstrapper/bootstrap.yaml delete mode 100644 bootstrapper/catalog_upload.json delete mode 100644 bootstrapper/configmap.yaml delete mode 100644 bootstrapper/start.py delete mode 100644 components/README.md delete mode 100644 components/template.yaml delete mode 100644 dashboard/origin-mlx/.dockerignore delete mode 100644 dashboard/origin-mlx/Dockerfile delete mode 100644 dashboard/origin-mlx/README.md delete mode 100644 dashboard/origin-mlx/developer-guide.md delete mode 100644 dashboard/origin-mlx/mlx-ui.yaml delete mode 100644 dashboard/origin-mlx/nbviewer-enterprise.yaml delete mode 100644 dashboard/origin-mlx/package-lock.json delete mode 100644 dashboard/origin-mlx/package.json delete mode 100644 dashboard/origin-mlx/public/dashboard_lib.bundle.js delete mode 100644 dashboard/origin-mlx/public/dashboard_lib.bundle.js.map delete mode 100644 dashboard/origin-mlx/public/index.html delete mode 100644 dashboard/origin-mlx/public/manifest.json delete mode 100644 dashboard/origin-mlx/public/mlx-logo-white.png delete mode 100644 dashboard/origin-mlx/server/package-lock.json delete mode 100644 dashboard/origin-mlx/server/package.json delete mode 100644 dashboard/origin-mlx/server/server.ts delete mode 100644 dashboard/origin-mlx/server/users.ts delete mode 100644 dashboard/origin-mlx/src/App.css delete mode 100644 dashboard/origin-mlx/src/App.test.tsx delete mode 100644 dashboard/origin-mlx/src/App.tsx delete mode 100644 dashboard/origin-mlx/src/CSSReset.tsx delete mode 100644 dashboard/origin-mlx/src/Css.test.tsx delete mode 100644 dashboard/origin-mlx/src/Css.tsx delete mode 100644 dashboard/origin-mlx/src/components/Button/Button.tsx delete mode 100644 dashboard/origin-mlx/src/components/Button/ButtonWithTooltip.tsx delete mode 100644 dashboard/origin-mlx/src/components/Button/index.tsx delete mode 100644 dashboard/origin-mlx/src/components/DataList.tsx delete mode 100644 dashboard/origin-mlx/src/components/DataListItem.tsx delete mode 100644 dashboard/origin-mlx/src/components/Detail/ComponentDetail.tsx delete mode 100644 dashboard/origin-mlx/src/components/Detail/DatasetDetail.tsx delete mode 100644 dashboard/origin-mlx/src/components/Detail/KFServingDetail.tsx delete mode 100644 dashboard/origin-mlx/src/components/Detail/ModelDetail.tsx delete mode 100644 dashboard/origin-mlx/src/components/Detail/NotebookDetail.tsx delete mode 100644 dashboard/origin-mlx/src/components/Detail/OperatorDetail.tsx delete mode 100644 dashboard/origin-mlx/src/components/Detail/PipelineDetail.tsx delete mode 100644 dashboard/origin-mlx/src/components/Graph.tsx delete mode 100644 dashboard/origin-mlx/src/components/Hero.tsx delete mode 100644 dashboard/origin-mlx/src/components/Link.tsx delete mode 100644 dashboard/origin-mlx/src/components/LoadingMessage.tsx delete mode 100644 dashboard/origin-mlx/src/components/MarkdownViewer.tsx delete mode 100644 dashboard/origin-mlx/src/components/MetadataView.tsx delete mode 100644 dashboard/origin-mlx/src/components/PageFooter.tsx delete mode 100644 dashboard/origin-mlx/src/components/PipelineDetailGraph.tsx delete mode 100644 dashboard/origin-mlx/src/components/RelatedAssetView.tsx delete mode 100644 dashboard/origin-mlx/src/components/Rotate.tsx delete mode 100644 dashboard/origin-mlx/src/components/RunView/ModelRunView.tsx delete mode 100644 dashboard/origin-mlx/src/components/RunView/RunView.tsx delete mode 100644 dashboard/origin-mlx/src/components/RunView/index.ts delete mode 100644 dashboard/origin-mlx/src/components/SecretMenu.tsx delete mode 100644 dashboard/origin-mlx/src/components/Sidebar/SideBarHeader.tsx delete mode 100644 dashboard/origin-mlx/src/components/Sidebar/Sidebar.tsx delete mode 100644 dashboard/origin-mlx/src/components/Sidebar/SidebarList.tsx delete mode 100644 dashboard/origin-mlx/src/components/Sidebar/SidebarListItem.tsx delete mode 100644 dashboard/origin-mlx/src/components/Sidebar/index.ts delete mode 100644 dashboard/origin-mlx/src/components/SourceCodeDisplay.tsx delete mode 100644 dashboard/origin-mlx/src/components/StaticGraphParser.tsx delete mode 100644 dashboard/origin-mlx/src/components/Tooltip/Tooltip.tsx delete mode 100644 dashboard/origin-mlx/src/components/UploadButton.tsx delete mode 100644 dashboard/origin-mlx/src/components/WorkflowParser.tsx delete mode 100644 dashboard/origin-mlx/src/icons/codaitLogo.tsx delete mode 100644 dashboard/origin-mlx/src/icons/experiments.tsx delete mode 100644 dashboard/origin-mlx/src/icons/kubeflowLogo.tsx delete mode 100644 dashboard/origin-mlx/src/icons/pipelines.tsx delete mode 100644 dashboard/origin-mlx/src/icons/statusRunning.tsx delete mode 100644 dashboard/origin-mlx/src/icons/statusTerminated.tsx delete mode 100644 dashboard/origin-mlx/src/images/cancel-outline.png delete mode 100644 dashboard/origin-mlx/src/images/cancel.png delete mode 100644 dashboard/origin-mlx/src/images/checkmark-outline.png delete mode 100644 dashboard/origin-mlx/src/images/checkmark.png delete mode 100644 dashboard/origin-mlx/src/images/close.png delete mode 100644 dashboard/origin-mlx/src/images/error.png delete mode 100644 dashboard/origin-mlx/src/images/explainer-icon.png delete mode 100644 dashboard/origin-mlx/src/images/graph-dashboard.png delete mode 100644 dashboard/origin-mlx/src/images/image1.png delete mode 100644 dashboard/origin-mlx/src/images/image2.png delete mode 100644 dashboard/origin-mlx/src/images/indicator-gif.gif delete mode 100644 dashboard/origin-mlx/src/images/istio-boat.png delete mode 100644 dashboard/origin-mlx/src/images/k8s-logo.png delete mode 100644 dashboard/origin-mlx/src/images/keras-logo.png delete mode 100644 dashboard/origin-mlx/src/images/knative-logo.png delete mode 100644 dashboard/origin-mlx/src/images/kubeflow-logo.png delete mode 100644 dashboard/origin-mlx/src/images/landing-page.png delete mode 100644 dashboard/origin-mlx/src/images/lfaidata.png delete mode 100644 dashboard/origin-mlx/src/images/mlx-logo-name-white.png delete mode 100644 dashboard/origin-mlx/src/images/mlx-logo-white.png delete mode 100644 dashboard/origin-mlx/src/images/monitoring-dashboard.png delete mode 100644 dashboard/origin-mlx/src/images/predictor-icon.png delete mode 100644 dashboard/origin-mlx/src/images/pytorch-logo.png delete mode 100644 dashboard/origin-mlx/src/images/scikit-learn-logo.png delete mode 100644 dashboard/origin-mlx/src/images/tf-logo.png delete mode 100644 dashboard/origin-mlx/src/images/transformer-icon.png delete mode 100644 dashboard/origin-mlx/src/images/update-icon.png delete mode 100644 dashboard/origin-mlx/src/images/vertical-line.png delete mode 100644 dashboard/origin-mlx/src/index.css delete mode 100644 dashboard/origin-mlx/src/index.tsx delete mode 100644 dashboard/origin-mlx/src/lib/api/artifacts.ts delete mode 100644 dashboard/origin-mlx/src/lib/api/run.ts delete mode 100644 dashboard/origin-mlx/src/lib/api/settings.ts delete mode 100644 dashboard/origin-mlx/src/lib/api/types.ts delete mode 100644 dashboard/origin-mlx/src/lib/api/upload.ts delete mode 100644 dashboard/origin-mlx/src/lib/stores/artifacts.ts delete mode 100644 dashboard/origin-mlx/src/lib/stores/context.tsx delete mode 100644 dashboard/origin-mlx/src/lib/stores/pages.ts delete mode 100644 dashboard/origin-mlx/src/lib/stores/pipeline.ts delete mode 100644 dashboard/origin-mlx/src/lib/stores/reducer.ts delete mode 100644 dashboard/origin-mlx/src/lib/stores/settings.ts delete mode 100644 dashboard/origin-mlx/src/lib/stores/types.ts delete mode 100644 dashboard/origin-mlx/src/lib/stores/util.ts delete mode 100644 dashboard/origin-mlx/src/lib/util.ts delete mode 100644 dashboard/origin-mlx/src/logo.svg delete mode 100644 dashboard/origin-mlx/src/mock/NotebookData.ts delete mode 100644 dashboard/origin-mlx/src/mock/OpDetailData.ts delete mode 100644 dashboard/origin-mlx/src/mock/OperatorData.ts delete mode 100644 dashboard/origin-mlx/src/mock/PipelineData.ts delete mode 100644 dashboard/origin-mlx/src/mock/SampleGraph.ts delete mode 100644 dashboard/origin-mlx/src/mock/SampleGraph2.ts delete mode 100644 dashboard/origin-mlx/src/mock/UploadedData.ts delete mode 100644 dashboard/origin-mlx/src/pages/Default404Page.tsx delete mode 100644 dashboard/origin-mlx/src/pages/ExternalLinksPage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/IframePage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/KFServingAllPage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/KFServingDetailPage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/KFServingFeaturedPage/KFServingCard.tsx delete mode 100644 dashboard/origin-mlx/src/pages/KFServingFeaturedPage/KFServingFeatured.tsx delete mode 100644 dashboard/origin-mlx/src/pages/KFServingFeaturedPage/KFServingFeaturedPage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/KFServingFeaturedPage/index.ts delete mode 100644 dashboard/origin-mlx/src/pages/KFServingUploadPage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/LandingPage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/MetaAllPage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/MetaDeletePage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/MetaDetailPage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/MetaFeaturedPage/MetaCard.tsx delete mode 100644 dashboard/origin-mlx/src/pages/MetaFeaturedPage/MetaFeatured.tsx delete mode 100644 dashboard/origin-mlx/src/pages/MetaFeaturedPage/MetaFeaturedPage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/MetaFeaturedPage/index.ts delete mode 100644 dashboard/origin-mlx/src/pages/SettingsPage.tsx delete mode 100644 dashboard/origin-mlx/src/pages/UploadPage.tsx delete mode 100644 dashboard/origin-mlx/src/react-app-env.d.ts delete mode 100644 dashboard/origin-mlx/src/serviceWorker.ts delete mode 100644 dashboard/origin-mlx/src/styles/Graph.css delete mode 100644 dashboard/origin-mlx/src/styles/Models.css delete mode 100644 dashboard/origin-mlx/src/styles/Sidebar.css delete mode 100644 dashboard/origin-mlx/tsconfig.json delete mode 100644 datasets/README.md delete mode 100644 docs/README.md delete mode 100644 docs/images/CatalogImport.png delete mode 100644 docs/images/LandingPage.png delete mode 100644 docs/images/catalogsource.jpg delete mode 100644 docs/images/mlx-architecture-2.png delete mode 100644 docs/images/mlx-architecture-4.png delete mode 100644 docs/images/mlx-ui-diagram.png delete mode 100644 docs/images/mlx.png delete mode 100644 docs/images/models-workshop/create-OCP-route.png delete mode 100644 docs/images/models-workshop/register-model.png delete mode 100644 docs/images/models-workshop/upload-model-yaml.png delete mode 100644 docs/images/models-workshop/view-all-models.png delete mode 100644 docs/images/olm-1.png delete mode 100644 docs/images/olm-2.png delete mode 100644 docs/images/ui-folder-tree.png delete mode 100644 docs/images/workshop/Datasets-featured-page.png delete mode 100644 docs/images/workshop/Datasets-launch.png delete mode 100644 docs/images/workshop/Datasets-output-PVC-name.png delete mode 100644 docs/images/workshop/Datasets-related-assets.png delete mode 100644 docs/images/workshop/Datasets-run-graph.png delete mode 100644 docs/images/workshop/Models-Swagger-UI.png delete mode 100644 docs/images/workshop/Models-featured-page.png delete mode 100644 docs/images/workshop/Models-launch.png delete mode 100644 docs/images/workshop/Models-predict-open-source-file.png delete mode 100644 docs/images/workshop/Models-run-output.png delete mode 100644 docs/images/workshop/Notebooks-featured-page.png delete mode 100644 docs/images/workshop/Notebooks-language-classification-test.png delete mode 100644 docs/images/workshop/Notebooks-launch.png delete mode 100644 docs/images/workshop/Notebooks-run-graph.png delete mode 100644 docs/images/workshop/Notebooks-run-logs.png delete mode 100644 docs/import-assets.md delete mode 100644 docs/install-mlx-on-kind.md delete mode 100644 docs/install-mlx-on-kubeflow.md delete mode 100644 docs/mlx-install-operator.md delete mode 100644 docs/mlx-install-with-kubeflow.md delete mode 100644 docs/mlx-models-workshop.md delete mode 100644 docs/mlx-read-only-deployment.md delete mode 100644 docs/mlx-setup.md delete mode 100644 docs/mlx-workshop.md delete mode 100644 docs/troubleshooting.md delete mode 100644 docs/usage-steps.md delete mode 100644 hack/olm-console.yaml delete mode 100644 manifests/base/kustomization.yaml delete mode 100644 manifests/base/mlx-api-vs.yaml delete mode 100644 manifests/base/mlx-deployments/kustomization.yaml delete mode 100644 manifests/base/mlx-deployments/mlx-api.yaml delete mode 100644 manifests/base/mlx-deployments/mlx-ui.yaml delete mode 100644 manifests/base/mlx-profile.yaml delete mode 100644 manifests/base/mlx-ui-vs.yaml delete mode 100644 manifests/istio-auth/istio-configmap.yaml delete mode 100644 manifests/istio-auth/kustomization.yaml delete mode 100644 manifests/istio-auth/ml-pipeline-api-auth.yaml delete mode 100644 manifests/istio-auth/mlx-api-auth.yaml delete mode 100644 manifests/istio-auth/mlx-api-patch.yaml delete mode 100644 manifests/istio-auth/mlx-ext-authz.yaml delete mode 100644 manifests/istio-auth/mlx-ui-auth.yaml delete mode 100644 manifests/istio-auth/mysql-auth.yaml delete mode 100644 manifests/plugins/nbviewer-enterprise/kustomization.yaml delete mode 100644 manifests/plugins/nbviewer-enterprise/nbviewer-enterprise.yaml delete mode 100644 manifests/prod-multi-user/envoy-filter-patch.yaml delete mode 100644 manifests/prod-multi-user/kubeflow-dashboard-patch.yaml delete mode 100644 manifests/prod-multi-user/kustomization.yaml delete mode 100644 manifests/prod-multi-user/mlx-ext-authz-patch.yaml delete mode 100644 manifests/prod-multi-user/mlx-ui-patch.yaml delete mode 100644 manifests/prod-multi-user/oidc-patch.yaml delete mode 100644 manifests/read-only-k8s/config.yaml delete mode 100644 manifests/read-only-k8s/init-jobs.yaml delete mode 100644 manifests/read-only-k8s/k8s-ingress.yaml delete mode 100644 manifests/read-only-k8s/kustomization.yaml delete mode 100644 manifests/read-only-k8s/minio.yaml delete mode 100644 manifests/read-only-k8s/mlx-api-patch.yaml delete mode 100644 manifests/read-only-k8s/mlx-ui-patch.yaml delete mode 100644 manifests/read-only-k8s/mysql.yaml delete mode 100644 manifests/read-only-k8s/namespace.yaml delete mode 100644 manifests/read-only-k8s/params.yaml create mode 100644 mlx/cos_backend.py delete mode 100644 models/README.md delete mode 100644 models/template.yaml delete mode 100644 models/template/archive/data.yaml delete mode 100644 models/template/archive/model_old.yaml delete mode 100644 models/template/archive/onnx_convert.yaml delete mode 100644 notebooks/README.md delete mode 100644 notebooks/template.yaml delete mode 100644 pipelines/README.md delete mode 100644 quickstart/README.md delete mode 100644 quickstart/docker-compose.yaml create mode 100644 schema/dataset.json create mode 100644 schema/model.json create mode 100644 schema/notebook.json create mode 100644 schema/pipeline.json create mode 100644 schema/pipeline_operator.json delete mode 100755 tools/bash/add_license_headers.sh delete mode 100755 tools/bash/check_diff.sh delete mode 100755 tools/bash/mdtoc.sh delete mode 100755 tools/python/regenerate_catalog_upload_json.py delete mode 100755 tools/python/update_doc_table.py delete mode 100755 tools/python/verify_doc_links.py delete mode 100755 tools/python/verify_npm_packages.py diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 4589ca3b..00000000 --- a/.travis.yml +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -language: python -python: 3.6 -install: pip install flake8 - -branches: - only: - - main - -services: - - docker - -jobs: - include: - - name: "UI Build" - stage: test - env: - - DIFF_DETECTED_ERR_CODE=169 - - DIFF_DIR=dashboard/origin-mlx - before_script: &0 - # No diff detected: terminate job with success i.e. travis_terminate 0 - # Script throws unexpected error: fail job with error code - # Diff detected: continue/run this job - - git remote add upstream https://github.com/machine-learning-exchange/mlx.git - - git fetch upstream - - ./tools/bash/check_diff.sh ; EXIT_CODE=$? - - | - if [ "$TRAVIS_EVENT_TYPE" != "cron" ]; then - if [ $EXIT_CODE -eq 0 ]; then - echo "No changes detected - skipping job." - travis_terminate 0 - elif [ $EXIT_CODE -ne $DIFF_DETECTED_ERR_CODE ]; then - echo "Unexpected error in check_diff.sh - failing job." - travis_terminate $EXIT_CODE - fi - fi - - echo "Changes detected - continue running job" - script: - - cd dashboard/origin-mlx && docker build -t mlexchange/mlx-ui:nightly-origin-$TRAVIS_BRANCH . && cd .. - - docker images - - if [ "$TRAVIS_EVENT_TYPE" == "cron" ]; then docker login -u $username -p $password && docker push mlexchange/mlx-ui:nightly-origin-$TRAVIS_BRANCH; fi - - name: "API Build" - env: - - DIFF_DETECTED_ERR_CODE=169 - - DIFF_DIR=api/server - before_script: *0 - script: - - cd api/server && docker build -t mlexchange/mlx-api:nightly-$TRAVIS_BRANCH . && cd ../.. - - docker images - - if [ "$TRAVIS_EVENT_TYPE" == "cron" ]; then docker login -u $username -p $password && docker push mlexchange/mlx-api:nightly-$TRAVIS_BRANCH; fi - - name: "Python flake8 check" - script: - - flake8 . --count --exclude=./api/server/swagger_server/code_templates --select=E9,F63,F7,F82 --show-source --statistics - - name: "Check license headers" - script: - - make check_license -notifications: - email: false diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 50db9237..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,14 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -## [Unreleased] - -## [0.1.0] - 2021-05-03 - -### Added - -- Added a changelog - -[unreleased]: https://github.com/machine-learning-exchange/mlx/compare/v0.0.1...HEAD -[0.0.1]: https://github.com/machine-learning-exchange/mlx/releases/tag/v0.0.1 diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 6e5d89ef..10f62353 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -4,72 +4,5 @@ Following is the current list of maintainers on this project The maintainers are listed in alphabetical order. -- [@drewbutlerbb4](https://github.com/drewbutlerbb4) (Andrew Butler) -- [@animeshsingh](https://github.com/animeshsingh) (Animesh Singh) -- [@ckadner](https://github.com/ckadner) (Christian Kadner) -- [@Tomcli](https://github.com/Tomcli) (Tommy Li) - -## Methodology - -This repository currently does not have a traditional release management cycle, but -should instead be maintained as a useful, working, and polished reference at -all times. While all work can therefore be focused on the master branch, the -quality of this branch should never be compromised. Over a period of time we will gradate to point releases - -The remainder of this document details how to merge pull requests to the -repositories. - -## Merge approval - -The project maintainers use LGTM (Looks Good To Me) in comments on the pull -request to indicate acceptance prior to merging. A change requires LGTMs from -two project maintainers. If the code is written by a maintainer, the change -only requires one additional LGTM. - -## Reviewing Pull Requests - -We recommend reviewing pull requests directly within GitHub. This allows a -public commentary on changes, providing transparency for all users. When -providing feedback be civil, courteous, and kind. Disagreement is fine, so long -as the discourse is carried out politely. If we see a record of uncivil or -abusive comments, we will revoke your commit privileges and invite you to leave -the project. - -During your review, consider the following points: - -### Does the change have positive impact? - -Some proposed changes may not represent a positive impact to the project. Ask -whether or not the change will make understanding the code easier, or if it -could simply be a personal preference on the part of the author (see -[bikeshedding](https://en.wiktionary.org/wiki/bikeshedding)). - -Pull requests that do not have a clear positive impact should be closed without -merging. - -### Do the changes make sense? - -If you do not understand what the changes are or what they accomplish, ask the -author for clarification. Ask the author to add comments and/or clarify test -case names to make the intentions clear. - -At times, such clarification will reveal that the author may not be using the -code correctly, or is unaware of features that accommodate their needs. If you -feel this is the case, work up a code sample that would address the pull -request for them, and feel free to close the pull request once they confirm. - -### Does the change introduce a new feature? - -For any given pull request, ask yourself "is this a new feature?" If so, does -the pull request (or associated issue) contain narrative indicating the need -for the feature? If not, ask them to provide that information. - -Are new unit tests in place that test all new behaviors introduced? If not, do -not merge the feature until they are! Is documentation in place for the new -feature? (See the documentation guidelines). If not do not merge the feature -until it is! Is the feature necessary for general use cases? Try and keep the -scope of any given component narrow. If a proposed feature does not fit that -scope, recommend to the user that they maintain the feature on their own, and -close the request. You may also recommend that they see if the feature gains -traction among other users, and suggest they re-submit when they can show such -support. +- [@romeokienzler](https://github.com/romeokienzler) (Romeo Kienzler) +- [@GlennVerhaag](https://github.com/GlennVerhaag) (Glenn Verhaag) \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 6fe70ed3..00000000 --- a/Makefile +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -# Acknowledgements: -# - The help target was derived from https://stackoverflow.com/a/35730328/5601796 - -.PHONY: help -help: ## List the Make targets with description - @grep -E '^[0-9a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \ - awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-25s\033[0m %s\n", $$1, $$2}' - -.PHONY: check_npm_packages -check_npm_packages: ## Verify NPM packages - @python3 tools/python/verify_npm_packages.py --verify - @echo "$@: OK" - -.PHONY: update_npm_packages -update_npm_packages: ## Update NPM packages - @python3 tools/python/verify_npm_packages.py --update - @echo "$@: OK" - -.PHONY: check_doc_links -check_doc_links: ## Check markdown files for invalid links - @pip3 show requests > /dev/null || pip3 install requests - @python3 tools/python/verify_doc_links.py - @echo "$@: OK" - -.PHONY: update_doc_table -update_doc_table: ## Regenerate the /docs/README.md file - @python3 tools/python/update_doc_table.py - @echo "$@: OK" - -.PHONY: check_license -check_license: ## Make sure source files have license header - @git grep -L "SPDX-License-Identifier: Apache-2.0" -- *.py *.yml *.yaml *.sh *.html *.js *.css *.ts *.tsx ':!*.bundle.js' | \ - grep . && echo "Missing license headers in files above. Run './tools/bash/add_license_headers.sh'" && exit 1 || \ - echo "$@: OK" diff --git a/README.md b/README.md index 0c464805..d6910817 100644 --- a/README.md +++ b/README.md @@ -5,80 +5,24 @@ # Machine Learning eXchange (MLX) -**Data and AI Assets Catalog and Execution Engine** +**Data and AI Assets Catalog** -Allows upload, registration, execution, and deployment of: - - AI pipelines and pipeline components +Allows registration and search of Data and AI Assets: + - AI pipelines and pipeline operators - Models - Datasets - Notebooks + - Any other asset type by just specifying a JSON-Schema -Additionally it provides: +This is Version 2 of MLX. MLX comes with its own backend but +integrations to HugginFace and other catalogs are on the roadmap. - - Automated sample pipeline code generation to execute registered models, datasets and notebooks - - Pipelines engine powered by [Kubeflow Pipelines on Tekton](https://github.com/kubeflow/kfp-tekton), core of Watson AI Pipelines - - Components registry for Kubeflow Pipelines - - Datasets management by [Datashim](https://github.com/datashim-io/datashim) - - Preregistered Datasets from [Data Asset Exchange (DAX)](https://developer.ibm.com/exchanges/data/) and Models from [Model Asset Exchange (MAX)](https://developer.ibm.com/exchanges/models/) - - Serving engine by [KFServing](https://github.com/kubeflow/kfserving) - - Model Metadata schemas -For more details about the project check out this [announcement blog post](https://lfaidata.foundation/blog/2021/09/28/machine-learning-exchange-mlx/). - - - - - -## 1. Deployment - - -For a simple up-and-running MLX with asset catalog only, we created a [Quickstart Guide](./quickstart) -using [Docker Compose](https://docs.docker.com/compose/install/). - -For a slightly more resource-hungry local deployment that allows pipeline execution, we created the -[MLX with Kubernetes in Docker (KIND)](./docs/install-mlx-on-kind.md) deployment option. - -For a full deployment, we use [Kubeflow Kfctl](https://github.com/kubeflow/kfctl) tooling. - -* #### [MLX using Docker Compose (Asset Catalog Only)](./quickstart) - -* #### [MLX on Kubernetes in Docker (Fully Featured)](./docs/install-mlx-on-kind.md) - -* #### [MLX Deployment on Kubernetes or OpenShift](./docs/mlx-setup.md) - -* #### [MLX on an existing Kubeflow Cluster](./docs/install-mlx-on-kubeflow.md) - - -## 2. Access the MLX UI and import Assets to the Catalog - -By default, the MLX UI is available at http://:30380/mlx/ - -If you deployed on a **Kubernetes** cluster or using **OpenShift**, run the following and look for the External-IP column to find the public IP of a node. - -```bash -kubectl get node -o wide -``` - -For information on how to import data and AI assets using MLX's catalog importer, use this [guide](/docs/import-assets.md). - -## 3. Use MLX - -For information on how to use MLX and create assets check out this [guide](/docs/usage-steps.md). - -## 4. How to Contribute +## 1. How to Contribute For information about adding new features, bug fixing, communication or UI and API setup, refer to this [document](CONTRIBUTING.md). +## 2. Credits -## 5. Troubleshooting - -[MLX Troubleshooting Instructions](/docs/troubleshooting.md) - -## Join the Conversation - -* Slack: [@lfaifoundation/ml-exchange](https://lfaifoundation.slack.com/archives/C0264LKNH63) -* Mailing lists: - - [MLX-Announce](https://lists.lfaidata.foundation/g/mlx-announce) for top-level milestone messages and announcements - - [MLX-TSC](https://lists.lfaidata.foundation/g/mlx-tsc) for top-level governance discussions and decissions - - [MLX-Technical-Discuss](https://lists.lfaidata.foundation/g/mlx-technical-discuss) for technical discussions and questions +MLX is supported by the EU’s Horizon Europe program under Grant Agreement number 101131841 and also received funding from the Swiss State Secretariat for Education, Research and Innovation (SERI) and the UK Research and Innovation (UKRI). diff --git a/api/README.md b/api/README.md deleted file mode 100644 index b19dc814..00000000 --- a/api/README.md +++ /dev/null @@ -1,235 +0,0 @@ -# MLX API - Python Client and Python-Flask Server - -The MLX API is an extension to the Kubeflow Pipeline API with additional API -endpoints for Dataset, Models, Notebooks and Pipeline Components. -We use [OpenAPI v2 (fka Swagger)](https://swagger.io/specification/v2/) for the -[API specification](swagger/swagger.yaml). - - -# Deploy to Kubernetes - -If you already have a Kubeflow Pipelines deployment on a Kubernetes cluster, you -can use the following steps to deploy the MLX API on top of it. However, for a full -deployment of MLX we recommend following on of these [guides](../README.md#1-deployment) - -1) Run kubectl command to apply the manifest - - `kubectl apply -f ./server/mlx-api.yml` - -2) Find API Server Host and Port - - `export API_HOST=$(kubectl get nodes -o jsonpath='{.items[].status.addresses[?(@.type=="ExternalIP")].address}')` - `export API_PORT=$(kubectl get service mlx-api -n kubeflow -o jsonpath='{.spec.ports[0].nodePort}')` - -3) Open the Swagger UI in a Web Browser - - `open "http://${API_HOST}:${API_PORT}/apis/v1alpha1/ui/" ` - - ---- - -# API Development - -## Code Generation Overview - -![API Codegeneration Workflow](codegen_workflow.png) - -- Changes/additions to the API are done in the API [spec](swagger/swagger.yaml) -- The [`generate_code.sh`](generate_code.sh) script validates the API [spec](swagger/swagger.yaml) - and generates [`client`](client) and [`server`](server) Python packages. - The [examples](examples) package is hand-written based on the usage examples - inside the `client` package -- Instead of a static HTML documentation for the API endpoints, a Swagger UI web - interface will be generated on the fly when the Python server is started -- The API endpoints and the JSON data model is documented under [`client/docs`](client/docs) - in Markdown format which works well when browsing through the GitHub repo -- After the code generation, we need to copy any new API method stubs (if any new) - from the [`server/swagger_server/controllers`](server/swagger_server/controllers) folder - to the [`server/swagger_server/controllers_impl`](server/swagger_server/controllers_impl) - folder and implement the actual business logic -- If existing API method signatures got updated, we need to update the existing - `controller_impl` methods respectively - - -## Development Setup - -### Swagger Codegen 2.4 - -To generate our API we are using [`swagger-codegen`](https://github.com/swagger-api/swagger-codegen/tree/v2.4.8#prerequisites) -version [`2.4`](https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.8/swagger-codegen-cli-2.4.8.jar) -as `swagger-codegen` version `3.0` no longer supports `python` server. - -**Note**, Java 8 is **required** to run `swagger-codegen`. If not already installed, go to -[https://java.com/download](https://www.java.com/en/download/help/download_options.html). - -It is **not required** to install `swagger-codegen` since the `generate_code.sh` script will -download it the first time it runs: - - # curl -L -O -s "https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.8/swagger-codegen-cli-2.4.8.jar" - # function swagger-codegen() { java -jar "swagger-codegen-cli-2.4.8.jar" "$@"; } - # export -f swagger-codegen - -It is **not recommended** to install [`swagger-codegen@2`](https://formulae.brew.sh/formula/swagger-codegen@2) -via [Homebrew](https://docs.brew.sh/Installation) on macOS, since `brew install swagger-codegen@2` -does not allow selecting the _"old"_ version `2.4.8`. Instead, the `generate_code.sh` script -will automatically download the _"correct"_ version of the `swagger-codegen-cli.jar` file. - - # brew search swagger-codegen@ - # brew install swagger-codegen@2 - # brew link --force swagger-codegen@2 - -### Create a Python Virtual Environment for Development - - python3 -m venv .venv - source .venv/bin/activate - -### Install the Python Package Dependencies - - # cd - # cd api - - pip install -r ./requirements.txt - - - -## (Re-)Generate Swagger Client and Server Code - -If there are changes to the [API spec](swagger/swagger.yaml) then we need to re- -generate the API client and server code. Do not run the script `codegen.sh` -on its own, since Swagger generates a lot of unwanted and some breaking changes. -Instead use the [generate_code.sh](generate_code.sh) script which runs the Swagger -codegen and tries to undo some of the code and documentation changes that are not -desired. - - ./generate_code.sh - -## Build the Docker Image - - cd server - docker build -t /mlx-api-server:0.1 . - docker login - docker push /mlx-api-server:0.1 - cd .. - -## (Re-)Deploy to Kubernetes Cluster - -Change the Docker image tag in the deployment spec `server/mlx-api.yml` -from `image: docker.io/aipipeline/mlx-api:nightly-master` -to `image: docker.io//mlx-api-server:0.1` -and then run: - - ./deploy.sh - -or: - - kubectl delete -f ./server/mlx-api.yml - kubectl apply -f ./server/mlx-api.yml - - -## Testing API Code Changes Locally with Docker Compose - -You can test most code changes without a Kubernetes cluster. A K8s cluster is only -required to `run` the generated sample pipeline code. Running the Quickstart with -Docker Compose is sufficient to test any `katalog` related API endpoints. - -A development setup that works well requires 3 shell terminals in parallel: - -### TERMINAL 1 - Quickstart without the `mlx-api` Service - -Bring up the Quickstart without the `mlx-api` service, since we will run the MLX API -from our local source code, instead of using the pre-built Docker image `mlexchange/mlx-api:nightly-main`. - - # cd - cd quickstart - - docker compose --project-name no_api up minio miniosetup mysql mlx-ui dashboard - -When the MLX UI is ready, the log messages should show something like this: - - mlx-ui_1 | The build folder is ready to be deployed. - mlx-ui_1 | - mlx-ui_1 | Find out more about deployment here: - mlx-ui_1 | - mlx-ui_1 | bit.ly/CRA-deploy - mlx-ui_1 | - mlx-ui_1 | [HPM] Proxy created: / -> http://mlx-api - mlx-ui_1 | Server listening at http://localhost:3000 - -Now you could bring up the MLX UI on `localhost` port `80` (not `3000`), but it will not yet be -connected to the MLX API, which we will start in [TERMINAL 2](#terminal-2---swagger-server) - - http://localhost:80/ - -After testing or debugging your code changes, bring down the Docker Compose stack: - - # control + C - - docker compose --project-name no_api down - -Optional, to delete all data in Minio and MySQL, run the following commands: - - docker compose down -v --remove-orphans - docker compose rm -v -f - docker volume prune -f - - -### TERMINAL 2 - Swagger Server - -Bring up the API code and set the required environment variables to connect to MySQL and Minio. - -Make sure to have activated you Python virtual environment with the required package dependencies -installed as described [above](#create-a-python-virtual-environment-for-development). - - # cd - cd api/server/swagger_server - - export MINIO_SERVICE_SERVICE_HOST=localhost - export MINIO_SERVICE_SERVICE_PORT=9000 - export MYSQL_SERVICE_HOST=localhost - export MYSQL_SERVICE_PORT=3306 - export ML_PIPELINE_SERVICE_HOST=UNAVAILABLE - export ML_PIPELINE_SERVICE_PORT=UNAVAILABLE - - python3 -m swagger_server - -The terminal should show log messages like these: - - 2021/09/27 15:44:47.575 INFO [flaskapp] MLX API version: 0.1.29-dont-cache-kfservices - 2021/09/27 15:44:48.329 INFO [flaskapp] Enable cross-origin support with 'flask-cors': origins='*' - 2021/09/27 15:44:48.335 INFO [waitress] Serving on http://0.0.0.0:8080 - -Now you can bring up the MLX UI on `localhost` port `80` which should be connected to the -MLX API on local port `8080` - - http://localhost:80/ - -You can also bring up the Swagger API spec on port `8080` to test API endpoints directly - - http://localhost:8080/apis/v1alpha1/ui/ - -After testing or debugging your code changes, bring down the Swagger Server - - # control + C - -### TERMINAL 3 - Initialize the Catalog - -**Note**: The first time you bring up the Quickstart for API development, you need -to populate the MLX asset catalog, or, the next time after you brought down the -Docker Compose stack with the `-v` option (`docker compose --project-name no_api down -v`) - - # cd - cd bootstrapper - - # ./init_catalog.sh # still being worked on in PR #262 - # until PR #262 is merged, we use curl - - curl -X POST \ - -H 'Content-Type: application/json' \ - -H 'Accept: application/json' \ - -d @catalog_upload.json \ - http://localhost:8080/apis/v1alpha1/catalog - -# Troubleshooting - -Report any issues with at https://github.com/machine-learning-exchange/mlx/issues - diff --git a/api/client/.gitignore b/api/client/.gitignore deleted file mode 100644 index a655050c..00000000 --- a/api/client/.gitignore +++ /dev/null @@ -1,64 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*,cover -.hypothesis/ -venv/ -.python-version - -# Translations -*.mo -*.pot - -# Django stuff: -*.log - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -#Ipython Notebook -.ipynb_checkpoints diff --git a/api/client/.swagger-codegen-ignore b/api/client/.swagger-codegen-ignore deleted file mode 100644 index 0338cd6b..00000000 --- a/api/client/.swagger-codegen-ignore +++ /dev/null @@ -1,27 +0,0 @@ -# Swagger Codegen Ignore -# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen - -# Use this file to prevent files from being overwritten by the generator. -# The patterns follow closely to .gitignore or .dockerignore. - -# As an example, the C# client generator defines ApiClient.cs. -# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line: -#ApiClient.cs - -# You can match any string of characters against a directory, file or extension with a single asterisk (*): -#foo/*/qux -# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux - -# You can recursively match patterns against a directory, file or extension with a double asterisk (**): -#foo/**/qux -# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux - -# You can also negate patterns with an exclamation (!). -# For example, you can ignore all files in a docs folder with the file extension .md: -#docs/*.md -# Then explicitly reverse the ignore rule for a single file: -#!docs/README.md - -.travis.yml -git_push.sh -requirements.txt diff --git a/api/client/.swagger-codegen/VERSION b/api/client/.swagger-codegen/VERSION deleted file mode 100644 index 752a79ef..00000000 --- a/api/client/.swagger-codegen/VERSION +++ /dev/null @@ -1 +0,0 @@ -2.4.8 \ No newline at end of file diff --git a/api/client/README.md b/api/client/README.md deleted file mode 100644 index e9829a6e..00000000 --- a/api/client/README.md +++ /dev/null @@ -1,207 +0,0 @@ -# MLX API Cient - -MLX API Client - -This Python package is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project: - -- API version: 0.1.30-upload-catalog-from-url -- Package version: 1.0.0 -- Build package: io.swagger.codegen.languages.PythonClientCodegen - -## Requirements. - -Python 3.6+ - -## Installation & Usage - -### Create a Python Virtual Environment - -```sh -python3 -m venv .venv -source .venv/bin/activate -``` - -### pip install - -The MLX API Client is not yet hosted on PyPI but you can `pip install` it directly from Github: - -```sh -pip install "git+https://github.com/machine-learning-exchange/mlx.git@main#egg=mlx-client&subdirectory=api/client" -``` - -Then import the package: - -```python -import swagger_client -``` - - -## Getting Started - -Please follow the [installation procedure](#installation--usage) and then run the following: - -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -body = swagger_client.ApiComponent() # ApiComponent - -try: - api_response = api_instance.create_component(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling ComponentServiceApi->create_component: %s\n" % e) - -``` - -## Documentation for API Endpoints - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Class | Method | HTTP request | Description ------------- | ------------- | ------------- | ------------- -*ApplicationSettingsApi* | [**get_application_settings**](docs/ApplicationSettingsApi.md#get_application_settings) | **GET** /settings | -*ApplicationSettingsApi* | [**modify_application_settings**](docs/ApplicationSettingsApi.md#modify_application_settings) | **PUT** /settings | -*ApplicationSettingsApi* | [**set_application_settings**](docs/ApplicationSettingsApi.md#set_application_settings) | **POST** /settings | -*CatalogServiceApi* | [**list_all_assets**](docs/CatalogServiceApi.md#list_all_assets) | **GET** /catalog | -*CatalogServiceApi* | [**upload_catalog_from_url**](docs/CatalogServiceApi.md#upload_catalog_from_url) | **POST** /catalog/upload_from_url | -*CatalogServiceApi* | [**upload_multiple_assets**](docs/CatalogServiceApi.md#upload_multiple_assets) | **POST** /catalog | -*ComponentServiceApi* | [**approve_components_for_publishing**](docs/ComponentServiceApi.md#approve_components_for_publishing) | **POST** /components/publish_approved | -*ComponentServiceApi* | [**create_component**](docs/ComponentServiceApi.md#create_component) | **POST** /components | -*ComponentServiceApi* | [**delete_component**](docs/ComponentServiceApi.md#delete_component) | **DELETE** /components/{id} | -*ComponentServiceApi* | [**download_component_files**](docs/ComponentServiceApi.md#download_component_files) | **GET** /components/{id}/download | Returns the component artifacts compressed into a .tgz (.tar.gz) file. -*ComponentServiceApi* | [**generate_component_code**](docs/ComponentServiceApi.md#generate_component_code) | **GET** /components/{id}/generate_code | -*ComponentServiceApi* | [**get_component**](docs/ComponentServiceApi.md#get_component) | **GET** /components/{id} | -*ComponentServiceApi* | [**get_component_template**](docs/ComponentServiceApi.md#get_component_template) | **GET** /components/{id}/templates | -*ComponentServiceApi* | [**list_components**](docs/ComponentServiceApi.md#list_components) | **GET** /components | -*ComponentServiceApi* | [**run_component**](docs/ComponentServiceApi.md#run_component) | **POST** /components/{id}/run | -*ComponentServiceApi* | [**set_featured_components**](docs/ComponentServiceApi.md#set_featured_components) | **POST** /components/featured | -*ComponentServiceApi* | [**upload_component**](docs/ComponentServiceApi.md#upload_component) | **POST** /components/upload | -*ComponentServiceApi* | [**upload_component_file**](docs/ComponentServiceApi.md#upload_component_file) | **POST** /components/{id}/upload | -*ComponentServiceApi* | [**upload_component_from_url**](docs/ComponentServiceApi.md#upload_component_from_url) | **POST** /components/upload_from_url | -*CredentialServiceApi* | [**create_credential**](docs/CredentialServiceApi.md#create_credential) | **POST** /credentials | -*CredentialServiceApi* | [**delete_credential**](docs/CredentialServiceApi.md#delete_credential) | **DELETE** /credentials/{id} | -*CredentialServiceApi* | [**get_credential**](docs/CredentialServiceApi.md#get_credential) | **GET** /credentials/{id} | -*CredentialServiceApi* | [**list_credentials**](docs/CredentialServiceApi.md#list_credentials) | **GET** /credentials | -*DatasetServiceApi* | [**approve_datasets_for_publishing**](docs/DatasetServiceApi.md#approve_datasets_for_publishing) | **POST** /datasets/publish_approved | -*DatasetServiceApi* | [**create_dataset**](docs/DatasetServiceApi.md#create_dataset) | **POST** /datasets | -*DatasetServiceApi* | [**delete_dataset**](docs/DatasetServiceApi.md#delete_dataset) | **DELETE** /datasets/{id} | -*DatasetServiceApi* | [**download_dataset_files**](docs/DatasetServiceApi.md#download_dataset_files) | **GET** /datasets/{id}/download | Returns the dataset artifacts compressed into a .tgz (.tar.gz) file. -*DatasetServiceApi* | [**generate_dataset_code**](docs/DatasetServiceApi.md#generate_dataset_code) | **GET** /datasets/{id}/generate_code | -*DatasetServiceApi* | [**get_dataset**](docs/DatasetServiceApi.md#get_dataset) | **GET** /datasets/{id} | -*DatasetServiceApi* | [**get_dataset_template**](docs/DatasetServiceApi.md#get_dataset_template) | **GET** /datasets/{id}/templates | -*DatasetServiceApi* | [**list_datasets**](docs/DatasetServiceApi.md#list_datasets) | **GET** /datasets | -*DatasetServiceApi* | [**run_dataset**](docs/DatasetServiceApi.md#run_dataset) | **POST** /datasets/{id}/run | -*DatasetServiceApi* | [**set_featured_datasets**](docs/DatasetServiceApi.md#set_featured_datasets) | **POST** /datasets/featured | -*DatasetServiceApi* | [**upload_dataset**](docs/DatasetServiceApi.md#upload_dataset) | **POST** /datasets/upload | -*DatasetServiceApi* | [**upload_dataset_file**](docs/DatasetServiceApi.md#upload_dataset_file) | **POST** /datasets/{id}/upload | -*DatasetServiceApi* | [**upload_dataset_from_url**](docs/DatasetServiceApi.md#upload_dataset_from_url) | **POST** /datasets/upload_from_url | -*HealthCheckApi* | [**health_check**](docs/HealthCheckApi.md#health_check) | **GET** /health_check | Checks if the server is running -*InferenceServiceApi* | [**create_service**](docs/InferenceServiceApi.md#create_service) | **POST** /inferenceservices | -*InferenceServiceApi* | [**get_inferenceservices**](docs/InferenceServiceApi.md#get_inferenceservices) | **GET** /inferenceservices/{id} | -*InferenceServiceApi* | [**list_inferenceservices**](docs/InferenceServiceApi.md#list_inferenceservices) | **GET** /inferenceservices | -*InferenceServiceApi* | [**upload_service**](docs/InferenceServiceApi.md#upload_service) | **POST** /inferenceservices/upload | -*ModelServiceApi* | [**approve_models_for_publishing**](docs/ModelServiceApi.md#approve_models_for_publishing) | **POST** /models/publish_approved | -*ModelServiceApi* | [**create_model**](docs/ModelServiceApi.md#create_model) | **POST** /models | -*ModelServiceApi* | [**delete_model**](docs/ModelServiceApi.md#delete_model) | **DELETE** /models/{id} | -*ModelServiceApi* | [**download_model_files**](docs/ModelServiceApi.md#download_model_files) | **GET** /models/{id}/download | Returns the model artifacts compressed into a .tgz (.tar.gz) file. -*ModelServiceApi* | [**generate_model_code**](docs/ModelServiceApi.md#generate_model_code) | **GET** /models/{id}/generate_code | -*ModelServiceApi* | [**get_model**](docs/ModelServiceApi.md#get_model) | **GET** /models/{id} | -*ModelServiceApi* | [**get_model_template**](docs/ModelServiceApi.md#get_model_template) | **GET** /models/{id}/templates | -*ModelServiceApi* | [**list_models**](docs/ModelServiceApi.md#list_models) | **GET** /models | -*ModelServiceApi* | [**run_model**](docs/ModelServiceApi.md#run_model) | **POST** /models/{id}/run | -*ModelServiceApi* | [**set_featured_models**](docs/ModelServiceApi.md#set_featured_models) | **POST** /models/featured | -*ModelServiceApi* | [**upload_model**](docs/ModelServiceApi.md#upload_model) | **POST** /models/upload | -*ModelServiceApi* | [**upload_model_file**](docs/ModelServiceApi.md#upload_model_file) | **POST** /models/{id}/upload | -*ModelServiceApi* | [**upload_model_from_url**](docs/ModelServiceApi.md#upload_model_from_url) | **POST** /models/upload_from_url | -*NotebookServiceApi* | [**approve_notebooks_for_publishing**](docs/NotebookServiceApi.md#approve_notebooks_for_publishing) | **POST** /notebooks/publish_approved | -*NotebookServiceApi* | [**create_notebook**](docs/NotebookServiceApi.md#create_notebook) | **POST** /notebooks | -*NotebookServiceApi* | [**delete_notebook**](docs/NotebookServiceApi.md#delete_notebook) | **DELETE** /notebooks/{id} | -*NotebookServiceApi* | [**download_notebook_files**](docs/NotebookServiceApi.md#download_notebook_files) | **GET** /notebooks/{id}/download | Returns the notebook artifacts compressed into a .tgz (.tar.gz) file. -*NotebookServiceApi* | [**generate_notebook_code**](docs/NotebookServiceApi.md#generate_notebook_code) | **GET** /notebooks/{id}/generate_code | -*NotebookServiceApi* | [**get_notebook**](docs/NotebookServiceApi.md#get_notebook) | **GET** /notebooks/{id} | -*NotebookServiceApi* | [**get_notebook_template**](docs/NotebookServiceApi.md#get_notebook_template) | **GET** /notebooks/{id}/templates | -*NotebookServiceApi* | [**list_notebooks**](docs/NotebookServiceApi.md#list_notebooks) | **GET** /notebooks | -*NotebookServiceApi* | [**run_notebook**](docs/NotebookServiceApi.md#run_notebook) | **POST** /notebooks/{id}/run | -*NotebookServiceApi* | [**set_featured_notebooks**](docs/NotebookServiceApi.md#set_featured_notebooks) | **POST** /notebooks/featured | -*NotebookServiceApi* | [**upload_notebook**](docs/NotebookServiceApi.md#upload_notebook) | **POST** /notebooks/upload | -*NotebookServiceApi* | [**upload_notebook_file**](docs/NotebookServiceApi.md#upload_notebook_file) | **POST** /notebooks/{id}/upload | -*NotebookServiceApi* | [**upload_notebook_from_url**](docs/NotebookServiceApi.md#upload_notebook_from_url) | **POST** /notebooks/upload_from_url | -*PipelineServiceApi* | [**approve_pipelines_for_publishing**](docs/PipelineServiceApi.md#approve_pipelines_for_publishing) | **POST** /pipelines/publish_approved | -*PipelineServiceApi* | [**create_pipeline**](docs/PipelineServiceApi.md#create_pipeline) | **POST** /pipelines | -*PipelineServiceApi* | [**delete_pipeline**](docs/PipelineServiceApi.md#delete_pipeline) | **DELETE** /pipelines/{id} | -*PipelineServiceApi* | [**download_pipeline_files**](docs/PipelineServiceApi.md#download_pipeline_files) | **GET** /pipelines/{id}/download | Returns the pipeline YAML compressed into a .tgz (.tar.gz) file. -*PipelineServiceApi* | [**get_pipeline**](docs/PipelineServiceApi.md#get_pipeline) | **GET** /pipelines/{id} | -*PipelineServiceApi* | [**get_template**](docs/PipelineServiceApi.md#get_template) | **GET** /pipelines/{id}/templates | -*PipelineServiceApi* | [**list_pipelines**](docs/PipelineServiceApi.md#list_pipelines) | **GET** /pipelines | -*PipelineServiceApi* | [**run_custom_pipeline**](docs/PipelineServiceApi.md#run_custom_pipeline) | **POST** /pipelines/run_custom_pipeline | -*PipelineServiceApi* | [**run_pipeline**](docs/PipelineServiceApi.md#run_pipeline) | **POST** /pipelines/{id}/run | -*PipelineServiceApi* | [**set_featured_pipelines**](docs/PipelineServiceApi.md#set_featured_pipelines) | **POST** /pipelines/featured | -*PipelineServiceApi* | [**upload_pipeline**](docs/PipelineServiceApi.md#upload_pipeline) | **POST** /pipelines/upload | -*PipelineServiceApi* | [**upload_pipeline_from_url**](docs/PipelineServiceApi.md#upload_pipeline_from_url) | **POST** /pipelines/upload_from_url | - - -## Documentation For Models - - - [AnyValue](docs/AnyValue.md) - - [ApiAccessToken](docs/ApiAccessToken.md) - - [ApiAsset](docs/ApiAsset.md) - - [ApiCatalogUpload](docs/ApiCatalogUpload.md) - - [ApiCatalogUploadItem](docs/ApiCatalogUploadItem.md) - - [ApiCredential](docs/ApiCredential.md) - - [ApiGenerateCodeResponse](docs/ApiGenerateCodeResponse.md) - - [ApiGenerateModelCodeResponse](docs/ApiGenerateModelCodeResponse.md) - - [ApiGetTemplateResponse](docs/ApiGetTemplateResponse.md) - - [ApiInferenceservice](docs/ApiInferenceservice.md) - - [ApiListCatalogItemsResponse](docs/ApiListCatalogItemsResponse.md) - - [ApiListCatalogUploadErrors](docs/ApiListCatalogUploadErrors.md) - - [ApiListComponentsResponse](docs/ApiListComponentsResponse.md) - - [ApiListCredentialsResponse](docs/ApiListCredentialsResponse.md) - - [ApiListDatasetsResponse](docs/ApiListDatasetsResponse.md) - - [ApiListInferenceservicesResponse](docs/ApiListInferenceservicesResponse.md) - - [ApiListModelsResponse](docs/ApiListModelsResponse.md) - - [ApiListNotebooksResponse](docs/ApiListNotebooksResponse.md) - - [ApiListPipelinesResponse](docs/ApiListPipelinesResponse.md) - - [ApiMetadata](docs/ApiMetadata.md) - - [ApiModelFramework](docs/ApiModelFramework.md) - - [ApiModelFrameworkRuntimes](docs/ApiModelFrameworkRuntimes.md) - - [ApiModelScript](docs/ApiModelScript.md) - - [ApiParameter](docs/ApiParameter.md) - - [ApiPipeline](docs/ApiPipeline.md) - - [ApiPipelineCustom](docs/ApiPipelineCustom.md) - - [ApiPipelineCustomRunPayload](docs/ApiPipelineCustomRunPayload.md) - - [ApiPipelineDAG](docs/ApiPipelineDAG.md) - - [ApiPipelineExtension](docs/ApiPipelineExtension.md) - - [ApiPipelineInputs](docs/ApiPipelineInputs.md) - - [ApiPipelineTask](docs/ApiPipelineTask.md) - - [ApiPipelineTaskArguments](docs/ApiPipelineTaskArguments.md) - - [ApiRunCodeResponse](docs/ApiRunCodeResponse.md) - - [ApiSettings](docs/ApiSettings.md) - - [ApiSettingsSection](docs/ApiSettingsSection.md) - - [ApiStatus](docs/ApiStatus.md) - - [ApiUrl](docs/ApiUrl.md) - - [Dictionary](docs/Dictionary.md) - - [ProtobufAny](docs/ProtobufAny.md) - - [ApiCatalogUploadError](docs/ApiCatalogUploadError.md) - - [ApiCatalogUploadResponse](docs/ApiCatalogUploadResponse.md) - - [ApiComponent](docs/ApiComponent.md) - - [ApiDataset](docs/ApiDataset.md) - - [ApiModel](docs/ApiModel.md) - - [ApiNotebook](docs/ApiNotebook.md) - - [ApiPipelineExtended](docs/ApiPipelineExtended.md) - - -## Documentation For Authorization - - All endpoints do not require authorization. - - -## Author - - - diff --git a/api/client/docs/AnyValue.md b/api/client/docs/AnyValue.md deleted file mode 100644 index 292019ba..00000000 --- a/api/client/docs/AnyValue.md +++ /dev/null @@ -1,9 +0,0 @@ -# AnyValue - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiAccessToken.md b/api/client/docs/ApiAccessToken.md deleted file mode 100644 index e9d1ffe9..00000000 --- a/api/client/docs/ApiAccessToken.md +++ /dev/null @@ -1,11 +0,0 @@ -# ApiAccessToken - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**api_token** | **str** | A read-only API access token. | -**url_host** | **str** | The API server host that this API token applies to. | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiAsset.md b/api/client/docs/ApiAsset.md deleted file mode 100644 index e74fa1b5..00000000 --- a/api/client/docs/ApiAsset.md +++ /dev/null @@ -1,17 +0,0 @@ -# ApiAsset - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**created_at** | **datetime** | | [optional] -**name** | **str** | | -**description** | **str** | | -**featured** | **bool** | | [optional] -**publish_approved** | **bool** | | [optional] -**related_assets** | **list[str]** | | [optional] -**filter_categories** | **dict(str, str)** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiCatalogUpload.md b/api/client/docs/ApiCatalogUpload.md deleted file mode 100644 index c5ada669..00000000 --- a/api/client/docs/ApiCatalogUpload.md +++ /dev/null @@ -1,15 +0,0 @@ -# ApiCatalogUpload - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**api_access_tokens** | [**list[ApiAccessToken]**](ApiAccessToken.md) | A mapping of read-only API access tokens to a partial URL. | [optional] -**components** | [**list[ApiCatalogUploadItem]**](ApiCatalogUploadItem.md) | | [optional] -**datasets** | [**list[ApiCatalogUploadItem]**](ApiCatalogUploadItem.md) | | [optional] -**models** | [**list[ApiCatalogUploadItem]**](ApiCatalogUploadItem.md) | | [optional] -**notebooks** | [**list[ApiCatalogUploadItem]**](ApiCatalogUploadItem.md) | | [optional] -**pipelines** | [**list[ApiCatalogUploadItem]**](ApiCatalogUploadItem.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiCatalogUploadError.md b/api/client/docs/ApiCatalogUploadError.md deleted file mode 100644 index 20b29d67..00000000 --- a/api/client/docs/ApiCatalogUploadError.md +++ /dev/null @@ -1,13 +0,0 @@ -# ApiCatalogUploadError - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | | [optional] -**url** | **str** | The URL to the YAML metadata file, i.e. on GitHub.com | -**error_message** | **str** | | [optional] -**status_code** | **int** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiCatalogUploadItem.md b/api/client/docs/ApiCatalogUploadItem.md deleted file mode 100644 index 2a581c1a..00000000 --- a/api/client/docs/ApiCatalogUploadItem.md +++ /dev/null @@ -1,11 +0,0 @@ -# ApiCatalogUploadItem - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | | [optional] -**url** | **str** | The URL to the YAML metadata file, i.e. on GitHub.com | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiCatalogUploadResponse.md b/api/client/docs/ApiCatalogUploadResponse.md deleted file mode 100644 index d8f3669e..00000000 --- a/api/client/docs/ApiCatalogUploadResponse.md +++ /dev/null @@ -1,19 +0,0 @@ -# ApiCatalogUploadResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**components** | [**list[ApiComponent]**](ApiComponent.md) | | [optional] -**datasets** | [**list[ApiDataset]**](ApiDataset.md) | | [optional] -**models** | [**list[ApiModel]**](ApiModel.md) | | [optional] -**notebooks** | [**list[ApiNotebook]**](ApiNotebook.md) | | [optional] -**pipelines** | [**list[ApiPipeline]**](ApiPipeline.md) | | [optional] -**total_size** | **int** | | [optional] -**next_page_token** | **str** | | [optional] -**errors** | [**list[ApiCatalogUploadError]**](ApiCatalogUploadError.md) | | [optional] -**total_errors** | **int** | | [optional] -**total_created** | **int** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiComponent.md b/api/client/docs/ApiComponent.md deleted file mode 100644 index b351ccb1..00000000 --- a/api/client/docs/ApiComponent.md +++ /dev/null @@ -1,19 +0,0 @@ -# ApiComponent - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**created_at** | **datetime** | | [optional] -**name** | **str** | | -**description** | **str** | | -**featured** | **bool** | | [optional] -**publish_approved** | **bool** | | [optional] -**related_assets** | **list[str]** | | [optional] -**filter_categories** | **dict(str, str)** | | [optional] -**metadata** | [**ApiMetadata**](ApiMetadata.md) | | [optional] -**parameters** | [**list[ApiParameter]**](ApiParameter.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiCredential.md b/api/client/docs/ApiCredential.md deleted file mode 100644 index 8cfde3f0..00000000 --- a/api/client/docs/ApiCredential.md +++ /dev/null @@ -1,15 +0,0 @@ -# ApiCredential - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**created_at** | **datetime** | | [optional] -**pipeline_id** | **str** | | -**project_id** | **str** | | -**api_key** | **str** | TODO: what is the api_key | [optional] -**data_assets** | **list[str]** | List of data asset IDs | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiDataset.md b/api/client/docs/ApiDataset.md deleted file mode 100644 index bfac0766..00000000 --- a/api/client/docs/ApiDataset.md +++ /dev/null @@ -1,23 +0,0 @@ -# ApiDataset - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**created_at** | **datetime** | | [optional] -**name** | **str** | | -**description** | **str** | | -**featured** | **bool** | | [optional] -**publish_approved** | **bool** | | [optional] -**related_assets** | **list[str]** | | [optional] -**filter_categories** | **dict(str, str)** | | [optional] -**domain** | **str** | | [optional] -**format** | **str** | | [optional] -**size** | **str** | | [optional] -**number_of_records** | **int** | | [optional] -**license** | **str** | | [optional] -**metadata** | [**ApiMetadata**](ApiMetadata.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiGenerateCodeResponse.md b/api/client/docs/ApiGenerateCodeResponse.md deleted file mode 100644 index b1631d88..00000000 --- a/api/client/docs/ApiGenerateCodeResponse.md +++ /dev/null @@ -1,10 +0,0 @@ -# ApiGenerateCodeResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**script** | **str** | The script source code to run the component in a pipeline | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiGenerateModelCodeResponse.md b/api/client/docs/ApiGenerateModelCodeResponse.md deleted file mode 100644 index d43d0d53..00000000 --- a/api/client/docs/ApiGenerateModelCodeResponse.md +++ /dev/null @@ -1,10 +0,0 @@ -# ApiGenerateModelCodeResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**scripts** | [**list[ApiModelScript]**](ApiModelScript.md) | The source code samples to use the model in a pipeline | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiGetTemplateResponse.md b/api/client/docs/ApiGetTemplateResponse.md deleted file mode 100644 index b86527f9..00000000 --- a/api/client/docs/ApiGetTemplateResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ApiGetTemplateResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**template** | **str** | The YAML template file content | [optional] -**url** | **str** | The URL to download the template text from S3 storage (Minio) | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiInferenceservice.md b/api/client/docs/ApiInferenceservice.md deleted file mode 100644 index 7f7c0d28..00000000 --- a/api/client/docs/ApiInferenceservice.md +++ /dev/null @@ -1,13 +0,0 @@ -# ApiInferenceservice - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**api_version** | **str** | | -**kind** | **str** | | -**metadata** | [**AnyValue**](AnyValue.md) | | [optional] -**spec** | [**AnyValue**](AnyValue.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiListCatalogItemsResponse.md b/api/client/docs/ApiListCatalogItemsResponse.md deleted file mode 100644 index fee75026..00000000 --- a/api/client/docs/ApiListCatalogItemsResponse.md +++ /dev/null @@ -1,16 +0,0 @@ -# ApiListCatalogItemsResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**components** | [**list[ApiComponent]**](ApiComponent.md) | | [optional] -**datasets** | [**list[ApiDataset]**](ApiDataset.md) | | [optional] -**models** | [**list[ApiModel]**](ApiModel.md) | | [optional] -**notebooks** | [**list[ApiNotebook]**](ApiNotebook.md) | | [optional] -**pipelines** | [**list[ApiPipeline]**](ApiPipeline.md) | | [optional] -**total_size** | **int** | | [optional] -**next_page_token** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiListCatalogUploadErrors.md b/api/client/docs/ApiListCatalogUploadErrors.md deleted file mode 100644 index c8951d0e..00000000 --- a/api/client/docs/ApiListCatalogUploadErrors.md +++ /dev/null @@ -1,11 +0,0 @@ -# ApiListCatalogUploadErrors - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**errors** | [**list[ApiCatalogUploadError]**](ApiCatalogUploadError.md) | | [optional] -**total_errors** | **int** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiListComponentsResponse.md b/api/client/docs/ApiListComponentsResponse.md deleted file mode 100644 index 06bccbe5..00000000 --- a/api/client/docs/ApiListComponentsResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiListComponentsResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**components** | [**list[ApiComponent]**](ApiComponent.md) | | [optional] -**total_size** | **int** | | [optional] -**next_page_token** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiListCredentialsResponse.md b/api/client/docs/ApiListCredentialsResponse.md deleted file mode 100644 index d15b020fd..00000000 --- a/api/client/docs/ApiListCredentialsResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiListCredentialsResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**credentials** | [**list[ApiCredential]**](ApiCredential.md) | | [optional] -**total_size** | **int** | | [optional] -**next_page_token** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiListDatasetsResponse.md b/api/client/docs/ApiListDatasetsResponse.md deleted file mode 100644 index d68a2796..00000000 --- a/api/client/docs/ApiListDatasetsResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiListDatasetsResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**datasets** | [**list[ApiDataset]**](ApiDataset.md) | | [optional] -**total_size** | **int** | | [optional] -**next_page_token** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiListInferenceservicesResponse.md b/api/client/docs/ApiListInferenceservicesResponse.md deleted file mode 100644 index 2e63febe..00000000 --- a/api/client/docs/ApiListInferenceservicesResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiListInferenceservicesResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**inferenceservices** | [**list[ApiInferenceservice]**](ApiInferenceservice.md) | | [optional] -**total_size** | **int** | | [optional] -**next_page_token** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiListInstalledOperatorsResponse.md b/api/client/docs/ApiListInstalledOperatorsResponse.md deleted file mode 100644 index c0c0544a..00000000 --- a/api/client/docs/ApiListInstalledOperatorsResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiListInstalledOperatorsResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**operators** | [**list[Dictionary]**](Dictionary.md) | | [optional] -**total_size** | **int** | | [optional] -**next_page_token** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiListModelsResponse.md b/api/client/docs/ApiListModelsResponse.md deleted file mode 100644 index c9efaf0c..00000000 --- a/api/client/docs/ApiListModelsResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiListModelsResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**models** | [**list[ApiModel]**](ApiModel.md) | | [optional] -**total_size** | **int** | | [optional] -**next_page_token** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiListNotebooksResponse.md b/api/client/docs/ApiListNotebooksResponse.md deleted file mode 100644 index b4f1b6e3..00000000 --- a/api/client/docs/ApiListNotebooksResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiListNotebooksResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**notebooks** | [**list[ApiNotebook]**](ApiNotebook.md) | | [optional] -**total_size** | **int** | | [optional] -**next_page_token** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiListPipelinesResponse.md b/api/client/docs/ApiListPipelinesResponse.md deleted file mode 100644 index a4ea10a4..00000000 --- a/api/client/docs/ApiListPipelinesResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiListPipelinesResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**pipelines** | [**list[ApiPipelineExtended]**](ApiPipelineExtended.md) | | [optional] -**total_size** | **int** | | [optional] -**next_page_token** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiMetadata.md b/api/client/docs/ApiMetadata.md deleted file mode 100644 index f5a250e2..00000000 --- a/api/client/docs/ApiMetadata.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiMetadata - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**annotations** | **dict(str, str)** | | [optional] -**labels** | **dict(str, str)** | | [optional] -**tags** | **list[str]** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiModel.md b/api/client/docs/ApiModel.md deleted file mode 100644 index 3950d050..00000000 --- a/api/client/docs/ApiModel.md +++ /dev/null @@ -1,28 +0,0 @@ -# ApiModel - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**created_at** | **datetime** | | [optional] -**name** | **str** | | -**description** | **str** | | -**featured** | **bool** | | [optional] -**publish_approved** | **bool** | | [optional] -**related_assets** | **list[str]** | | [optional] -**filter_categories** | **dict(str, str)** | | [optional] -**domain** | **str** | | [optional] -**labels** | **dict(str, str)** | | [optional] -**framework** | [**ApiModelFramework**](ApiModelFramework.md) | | -**trainable** | **bool** | | [optional] -**trainable_tested_platforms** | **list[str]** | | [optional] -**trainable_credentials_required** | **bool** | | [optional] -**trainable_parameters** | [**list[ApiParameter]**](ApiParameter.md) | | [optional] -**servable** | **bool** | | [optional] -**servable_tested_platforms** | **list[str]** | | [optional] -**servable_credentials_required** | **bool** | | [optional] -**servable_parameters** | [**list[ApiParameter]**](ApiParameter.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiModelFramework.md b/api/client/docs/ApiModelFramework.md deleted file mode 100644 index 1c71f77a..00000000 --- a/api/client/docs/ApiModelFramework.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiModelFramework - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | | -**version** | **str** | | [optional] -**runtimes** | [**ApiModelFrameworkRuntimes**](ApiModelFrameworkRuntimes.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiModelFrameworkRuntimes.md b/api/client/docs/ApiModelFrameworkRuntimes.md deleted file mode 100644 index c11f39cd..00000000 --- a/api/client/docs/ApiModelFrameworkRuntimes.md +++ /dev/null @@ -1,11 +0,0 @@ -# ApiModelFrameworkRuntimes - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | | [optional] -**version** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiModelScript.md b/api/client/docs/ApiModelScript.md deleted file mode 100644 index 6cd790e8..00000000 --- a/api/client/docs/ApiModelScript.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiModelScript - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**pipeline_stage** | **str** | pipeline stage that this code sample applies to, either 'train' or 'serve' | -**execution_platform** | **str** | execution platform that this code sample applies to, i.e. 'kubernetes', 'knative' | -**script_code** | **str** | the source code to run the model in a pipeline stage | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiNotebook.md b/api/client/docs/ApiNotebook.md deleted file mode 100644 index a2415675..00000000 --- a/api/client/docs/ApiNotebook.md +++ /dev/null @@ -1,20 +0,0 @@ -# ApiNotebook - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**created_at** | **datetime** | | [optional] -**name** | **str** | | -**description** | **str** | | -**featured** | **bool** | | [optional] -**publish_approved** | **bool** | | [optional] -**related_assets** | **list[str]** | | [optional] -**filter_categories** | **dict(str, str)** | | [optional] -**url** | **str** | The URL to the notebook source file (.ipynb) on GitHub.com | -**metadata** | [**ApiMetadata**](ApiMetadata.md) | | [optional] -**parameters** | [**list[ApiParameter]**](ApiParameter.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiParameter.md b/api/client/docs/ApiParameter.md deleted file mode 100644 index cd420666..00000000 --- a/api/client/docs/ApiParameter.md +++ /dev/null @@ -1,13 +0,0 @@ -# ApiParameter - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | | -**description** | **str** | | [optional] -**default** | [**AnyValue**](AnyValue.md) | | [optional] -**value** | [**AnyValue**](AnyValue.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiPipeline.md b/api/client/docs/ApiPipeline.md deleted file mode 100644 index 06a7ac3d..00000000 --- a/api/client/docs/ApiPipeline.md +++ /dev/null @@ -1,17 +0,0 @@ -# ApiPipeline - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**created_at** | **datetime** | | [optional] -**name** | **str** | | [optional] -**description** | **str** | | [optional] -**parameters** | [**list[ApiParameter]**](ApiParameter.md) | | [optional] -**status** | **str** | In case any error happens retrieving a pipeline field, only pipeline ID and the error message is returned. Client has the flexibility of choosing how to handle error. This is especially useful during listing call. | [optional] -**default_version_id** | **str** | The default version of the pipeline. As of now, the latest version is used as default. (In the future, if desired by customers, we can allow them to set default version.) | [optional] -**namespace** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiPipelineCustom.md b/api/client/docs/ApiPipelineCustom.md deleted file mode 100644 index cb40b8f9..00000000 --- a/api/client/docs/ApiPipelineCustom.md +++ /dev/null @@ -1,13 +0,0 @@ -# ApiPipelineCustom - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**dag** | [**ApiPipelineDAG**](ApiPipelineDAG.md) | | -**inputs** | [**ApiPipelineInputs**](ApiPipelineInputs.md) | | [optional] -**name** | **str** | Name of the custom pipeline | -**description** | **str** | Optional description of the custom pipeline | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiPipelineCustomRunPayload.md b/api/client/docs/ApiPipelineCustomRunPayload.md deleted file mode 100644 index 35b8ba92..00000000 --- a/api/client/docs/ApiPipelineCustomRunPayload.md +++ /dev/null @@ -1,11 +0,0 @@ -# ApiPipelineCustomRunPayload - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**custom_pipeline** | [**ApiPipelineCustom**](ApiPipelineCustom.md) | | [optional] -**run_parameters** | [**Dictionary**](Dictionary.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiPipelineDAG.md b/api/client/docs/ApiPipelineDAG.md deleted file mode 100644 index ba50342d..00000000 --- a/api/client/docs/ApiPipelineDAG.md +++ /dev/null @@ -1,10 +0,0 @@ -# ApiPipelineDAG - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**tasks** | [**list[ApiPipelineTask]**](ApiPipelineTask.md) | List of pipeline tasks. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiPipelineExtended.md b/api/client/docs/ApiPipelineExtended.md deleted file mode 100644 index f5d7e805..00000000 --- a/api/client/docs/ApiPipelineExtended.md +++ /dev/null @@ -1,20 +0,0 @@ -# ApiPipelineExtended - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**created_at** | **datetime** | | [optional] -**name** | **str** | | [optional] -**description** | **str** | | [optional] -**parameters** | [**list[ApiParameter]**](ApiParameter.md) | | [optional] -**status** | **str** | In case any error happens retrieving a pipeline field, only pipeline ID and the error message is returned. Client has the flexibility of choosing how to handle error. This is especially useful during listing call. | [optional] -**default_version_id** | **str** | The default version of the pipeline. As of now, the latest version is used as default. (In the future, if desired by customers, we can allow them to set default version.) | [optional] -**namespace** | **str** | | [optional] -**annotations** | **dict(str, str)** | | [optional] -**featured** | **bool** | | [optional] -**publish_approved** | **bool** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiPipelineExtension.md b/api/client/docs/ApiPipelineExtension.md deleted file mode 100644 index db141188..00000000 --- a/api/client/docs/ApiPipelineExtension.md +++ /dev/null @@ -1,13 +0,0 @@ -# ApiPipelineExtension - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**id** | **str** | | [optional] -**annotations** | **dict(str, str)** | | [optional] -**featured** | **bool** | | [optional] -**publish_approved** | **bool** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiPipelineInputs.md b/api/client/docs/ApiPipelineInputs.md deleted file mode 100644 index 4b3e66df..00000000 --- a/api/client/docs/ApiPipelineInputs.md +++ /dev/null @@ -1,10 +0,0 @@ -# ApiPipelineInputs - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**parameters** | [**list[ApiParameter]**](ApiParameter.md) | List of pipeline parameters | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiPipelineTask.md b/api/client/docs/ApiPipelineTask.md deleted file mode 100644 index 11111d87..00000000 --- a/api/client/docs/ApiPipelineTask.md +++ /dev/null @@ -1,14 +0,0 @@ -# ApiPipelineTask - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | | [optional] -**artifact_type** | **str** | The type of artifact for this task, can be either one of: 'component', 'model', 'notebook', 'pipeline' | -**artifact_id** | **str** | The UUID of the artifact for this task | -**arguments** | [**ApiPipelineTaskArguments**](ApiPipelineTaskArguments.md) | | [optional] -**dependencies** | **list[str]** | Task dependencies, referring to upstream tasks that have to be completed prior to running this task by their respective task names | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiPipelineTaskArguments.md b/api/client/docs/ApiPipelineTaskArguments.md deleted file mode 100644 index d1635dc4..00000000 --- a/api/client/docs/ApiPipelineTaskArguments.md +++ /dev/null @@ -1,10 +0,0 @@ -# ApiPipelineTaskArguments - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**parameters** | [**list[ApiParameter]**](ApiParameter.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiRunCodeResponse.md b/api/client/docs/ApiRunCodeResponse.md deleted file mode 100644 index 56b8ee7a..00000000 --- a/api/client/docs/ApiRunCodeResponse.md +++ /dev/null @@ -1,11 +0,0 @@ -# ApiRunCodeResponse - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**run_url** | **str** | The URL path to view the run details in the Kubeflow Pipeline Web UI | -**run_output_location** | **str** | The location of the output artifacts produced by the run, if any. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiSettings.md b/api/client/docs/ApiSettings.md deleted file mode 100644 index 303f984b..00000000 --- a/api/client/docs/ApiSettings.md +++ /dev/null @@ -1,10 +0,0 @@ -# ApiSettings - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**sections** | [**list[ApiSettingsSection]**](ApiSettingsSection.md) | List of configuration categories. | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiSettingsSection.md b/api/client/docs/ApiSettingsSection.md deleted file mode 100644 index 374f56be..00000000 --- a/api/client/docs/ApiSettingsSection.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiSettingsSection - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**name** | **str** | Display name of the configuration category. | -**description** | **str** | Display text of the configuration category. | [optional] -**settings** | [**list[ApiParameter]**](ApiParameter.md) | List of settings. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiStatus.md b/api/client/docs/ApiStatus.md deleted file mode 100644 index 6a3feb57..00000000 --- a/api/client/docs/ApiStatus.md +++ /dev/null @@ -1,12 +0,0 @@ -# ApiStatus - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**error** | **str** | | [optional] -**code** | **int** | | [optional] -**details** | [**list[ProtobufAny]**](ProtobufAny.md) | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApiUrl.md b/api/client/docs/ApiUrl.md deleted file mode 100644 index a098f68f..00000000 --- a/api/client/docs/ApiUrl.md +++ /dev/null @@ -1,10 +0,0 @@ -# ApiUrl - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**pipeline_url** | **str** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/ApplicationSettingsApi.md b/api/client/docs/ApplicationSettingsApi.md deleted file mode 100644 index 12773b06..00000000 --- a/api/client/docs/ApplicationSettingsApi.md +++ /dev/null @@ -1,148 +0,0 @@ -# swagger_client.ApplicationSettingsApi - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**get_application_settings**](ApplicationSettingsApi.md#get_application_settings) | **GET** /settings | -[**modify_application_settings**](ApplicationSettingsApi.md#modify_application_settings) | **PUT** /settings | -[**set_application_settings**](ApplicationSettingsApi.md#set_application_settings) | **POST** /settings | - - -# **get_application_settings** -> ApiSettings get_application_settings() - - - -Returns the application settings. - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ApplicationSettingsApi() - -try: - api_response = api_instance.get_application_settings() - pprint(api_response) -except ApiException as e: - print("Exception when calling ApplicationSettingsApi->get_application_settings: %s\n" % e) -``` - -### Parameters -This endpoint does not need any parameter. - -### Return type - -[**ApiSettings**](ApiSettings.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **modify_application_settings** -> ApiSettings modify_application_settings(dictionary) - - - -Modify one or more of the application settings. - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ApplicationSettingsApi() -dictionary = swagger_client.Dictionary() # Dictionary | A dictionary where the name of the keys corresponds to the name of the settings. - -try: - api_response = api_instance.modify_application_settings(dictionary) - pprint(api_response) -except ApiException as e: - print("Exception when calling ApplicationSettingsApi->modify_application_settings: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **dictionary** | [**Dictionary**](Dictionary.md)| A dictionary where the name of the keys corresponds to the name of the settings. | - -### Return type - -[**ApiSettings**](ApiSettings.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: application/json - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **set_application_settings** -> ApiSettings set_application_settings(settings) - - - -Set and store the application settings. - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ApplicationSettingsApi() -settings = swagger_client.ApiSettings() # ApiSettings | - -try: - api_response = api_instance.set_application_settings(settings) - pprint(api_response) -except ApiException as e: - print("Exception when calling ApplicationSettingsApi->set_application_settings: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **settings** | [**ApiSettings**](ApiSettings.md)| | - -### Return type - -[**ApiSettings**](ApiSettings.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: application/json - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/api/client/docs/CatalogServiceApi.md b/api/client/docs/CatalogServiceApi.md deleted file mode 100644 index 24aa7733..00000000 --- a/api/client/docs/CatalogServiceApi.md +++ /dev/null @@ -1,154 +0,0 @@ -# swagger_client.CatalogServiceApi - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**list_all_assets**](CatalogServiceApi.md#list_all_assets) | **GET** /catalog | -[**upload_catalog_from_url**](CatalogServiceApi.md#upload_catalog_from_url) | **POST** /catalog/upload_from_url | -[**upload_multiple_assets**](CatalogServiceApi.md#upload_multiple_assets) | **POST** /catalog | - - -# **list_all_assets** -> ApiListCatalogItemsResponse list_all_assets(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.CatalogServiceApi() -page_token = 'page_token_example' # str | (optional) -page_size = 56 # int | (optional) -sort_by = 'sort_by_example' # str | Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. (optional) -filter = 'filter_example' # str | A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. (optional) - -try: - api_response = api_instance.list_all_assets(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - pprint(api_response) -except ApiException as e: - print("Exception when calling CatalogServiceApi->list_all_assets: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **page_token** | **str**| | [optional] - **page_size** | **int**| | [optional] - **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. | [optional] - **filter** | **str**| A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. | [optional] - -### Return type - -[**ApiListCatalogItemsResponse**](ApiListCatalogItemsResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_catalog_from_url** -> ApiCatalogUploadResponse upload_catalog_from_url(url, access_token=access_token) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.CatalogServiceApi() -url = 'url_example' # str | URL pointing to the catalog YAML file. -access_token = 'access_token_example' # str | Optional, the Bearer token to access the 'url'. (optional) - -try: - api_response = api_instance.upload_catalog_from_url(url, access_token=access_token) - pprint(api_response) -except ApiException as e: - print("Exception when calling CatalogServiceApi->upload_catalog_from_url: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **url** | **str**| URL pointing to the catalog YAML file. | - **access_token** | **str**| Optional, the Bearer token to access the 'url'. | [optional] - -### Return type - -[**ApiCatalogUploadResponse**](ApiCatalogUploadResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_multiple_assets** -> ApiCatalogUploadResponse upload_multiple_assets(body) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.CatalogServiceApi() -body = swagger_client.ApiCatalogUpload() # ApiCatalogUpload | - -try: - api_response = api_instance.upload_multiple_assets(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling CatalogServiceApi->upload_multiple_assets: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**ApiCatalogUpload**](ApiCatalogUpload.md)| | - -### Return type - -[**ApiCatalogUploadResponse**](ApiCatalogUploadResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/api/client/docs/ComponentServiceApi.md b/api/client/docs/ComponentServiceApi.md deleted file mode 100644 index 758aec83..00000000 --- a/api/client/docs/ComponentServiceApi.md +++ /dev/null @@ -1,621 +0,0 @@ -# swagger_client.ComponentServiceApi - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**approve_components_for_publishing**](ComponentServiceApi.md#approve_components_for_publishing) | **POST** /components/publish_approved | -[**create_component**](ComponentServiceApi.md#create_component) | **POST** /components | -[**delete_component**](ComponentServiceApi.md#delete_component) | **DELETE** /components/{id} | -[**download_component_files**](ComponentServiceApi.md#download_component_files) | **GET** /components/{id}/download | Returns the component artifacts compressed into a .tgz (.tar.gz) file. -[**generate_component_code**](ComponentServiceApi.md#generate_component_code) | **GET** /components/{id}/generate_code | -[**get_component**](ComponentServiceApi.md#get_component) | **GET** /components/{id} | -[**get_component_template**](ComponentServiceApi.md#get_component_template) | **GET** /components/{id}/templates | -[**list_components**](ComponentServiceApi.md#list_components) | **GET** /components | -[**run_component**](ComponentServiceApi.md#run_component) | **POST** /components/{id}/run | -[**set_featured_components**](ComponentServiceApi.md#set_featured_components) | **POST** /components/featured | -[**upload_component**](ComponentServiceApi.md#upload_component) | **POST** /components/upload | -[**upload_component_file**](ComponentServiceApi.md#upload_component_file) | **POST** /components/{id}/upload | -[**upload_component_from_url**](ComponentServiceApi.md#upload_component_from_url) | **POST** /components/upload_from_url | - - -# **approve_components_for_publishing** -> approve_components_for_publishing(component_ids) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -component_ids = [swagger_client.list[str]()] # list[str] | Array of component IDs to be approved for publishing. - -try: - api_instance.approve_components_for_publishing(component_ids) -except ApiException as e: - print("Exception when calling ComponentServiceApi->approve_components_for_publishing: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **component_ids** | **list[str]**| Array of component IDs to be approved for publishing. | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **create_component** -> ApiComponent create_component(body) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -body = swagger_client.ApiComponent() # ApiComponent | - -try: - api_response = api_instance.create_component(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling ComponentServiceApi->create_component: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**ApiComponent**](ApiComponent.md)| | - -### Return type - -[**ApiComponent**](ApiComponent.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **delete_component** -> delete_component(id) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -id = 'id_example' # str | - -try: - api_instance.delete_component(id) -except ApiException as e: - print("Exception when calling ComponentServiceApi->delete_component: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **download_component_files** -> file download_component_files(id, include_generated_code=include_generated_code) - -Returns the component artifacts compressed into a .tgz (.tar.gz) file. - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from urllib3.response import HTTPResponse - - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -component_id = '3diutD-2nDPQ' # str -include_generated_code = True # bool | Include generated run script in download (optional) (default to false) -tarfile_path = f'download/component_{component_id}.tgz' - -try: - # Returns the component artifacts compressed into a .tgz (.tar.gz) file. - response: HTTPResponse = \ - api_instance.download_component_files(component_id, - include_generated_code=include_generated_code, - _preload_content=False) - with open(tarfile_path, 'wb') as f: - f.write(response.read()) -except ApiException as e: - print("Exception when calling ComponentServiceApi->download_component_files: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| UUID of component | - **include_generated_code** | **bool**| Include generated run script in download | [optional] [default to false] - -### Return type - -**file** - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: application/gzip - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **generate_component_code** -> ApiGenerateCodeResponse generate_component_code(id) - - - -Generate sample code to use component in a pipeline - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.generate_component_code(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ComponentServiceApi->generate_component_code: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiGenerateCodeResponse**](ApiGenerateCodeResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_component** -> ApiComponent get_component(id) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_component(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ComponentServiceApi->get_component: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiComponent**](ApiComponent.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_component_template** -> ApiGetTemplateResponse get_component_template(id) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_component_template(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ComponentServiceApi->get_component_template: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiGetTemplateResponse**](ApiGetTemplateResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **list_components** -> ApiListComponentsResponse list_components(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -page_token = 'page_token_example' # str | (optional) -page_size = 56 # int | (optional) -sort_by = 'name' # str | Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. (optional) -filter = '{"name": "test"}' # str | A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. (optional) - -try: - api_response = api_instance.list_components(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - pprint(api_response) -except ApiException as e: - print("Exception when calling ComponentServiceApi->list_components: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **page_token** | **str**| | [optional] - **page_size** | **int**| | [optional] - **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. | [optional] - **filter** | **str**| A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. | [optional] - -### Return type - -[**ApiListComponentsResponse**](ApiListComponentsResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **run_component** -> ApiRunCodeResponse run_component(id, parameters, run_name=run_name) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -id = 'id_example' # str | -parameters = [swagger_client.ApiParameter()] # list[ApiParameter] | -run_name = 'run_name_example' # str | name to identify the run on the Kubeflow Pipelines UI, defaults to component name (optional) - -try: - api_response = api_instance.run_component(id, parameters, run_name=run_name) - pprint(api_response) -except ApiException as e: - print("Exception when calling ComponentServiceApi->run_component: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - **parameters** | [**list[ApiParameter]**](ApiParameter.md)| | - **run_name** | **str**| name to identify the run on the Kubeflow Pipelines UI, defaults to component name | [optional] - -### Return type - -[**ApiRunCodeResponse**](ApiRunCodeResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **set_featured_components** -> set_featured_components(component_ids) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -component_ids = [swagger_client.list[str]()] # list[str] | Array of component IDs to be featured. - -try: - api_instance.set_featured_components(component_ids) -except ApiException as e: - print("Exception when calling ComponentServiceApi->set_featured_components: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **component_ids** | **list[str]**| Array of component IDs to be featured. | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_component** -> ApiComponent upload_component(uploadfile, name=name) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -uploadfile = '/path/to/file.txt' # file | The component YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. -name = 'name_example' # str | (optional) - -try: - api_response = api_instance.upload_component(uploadfile, name=name) - pprint(api_response) -except ApiException as e: - print("Exception when calling ComponentServiceApi->upload_component: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **uploadfile** | **file**| The component YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. | - **name** | **str**| | [optional] - -### Return type - -[**ApiComponent**](ApiComponent.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_component_file** -> ApiComponent upload_component_file(id, uploadfile) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -id = 'id_example' # str | The id of the component. -uploadfile = '/path/to/file.txt' # file | The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - -try: - api_response = api_instance.upload_component_file(id, uploadfile) - pprint(api_response) -except ApiException as e: - print("Exception when calling ComponentServiceApi->upload_component_file: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| The id of the component. | - **uploadfile** | **file**| The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) | - -### Return type - -[**ApiComponent**](ApiComponent.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_component_from_url** -> ApiComponent upload_component_from_url(url, name=name, access_token=access_token) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ComponentServiceApi() -url = 'url_example' # str | URL pointing to the component YAML file. -name = 'name_example' # str | Optional, the name of the component to be created overriding the name in the YAML file. (optional) -access_token = 'access_token_example' # str | Optional, the Bearer token to access the 'url'. (optional) - -try: - api_response = api_instance.upload_component_from_url(url, name=name, access_token=access_token) - pprint(api_response) -except ApiException as e: - print("Exception when calling ComponentServiceApi->upload_component_from_url: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **url** | **str**| URL pointing to the component YAML file. | - **name** | **str**| Optional, the name of the component to be created overriding the name in the YAML file. | [optional] - **access_token** | **str**| Optional, the Bearer token to access the 'url'. | [optional] - -### Return type - -[**ApiComponent**](ApiComponent.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/api/client/docs/CredentialServiceApi.md b/api/client/docs/CredentialServiceApi.md deleted file mode 100644 index 1548db36..00000000 --- a/api/client/docs/CredentialServiceApi.md +++ /dev/null @@ -1,199 +0,0 @@ -# swagger_client.CredentialServiceApi - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**create_credential**](CredentialServiceApi.md#create_credential) | **POST** /credentials | -[**delete_credential**](CredentialServiceApi.md#delete_credential) | **DELETE** /credentials/{id} | -[**get_credential**](CredentialServiceApi.md#get_credential) | **GET** /credentials/{id} | -[**list_credentials**](CredentialServiceApi.md#list_credentials) | **GET** /credentials | - - -# **create_credential** -> ApiCredential create_credential(body) - - - -Creates a credential associated with a pipeline. - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.CredentialServiceApi() -body = swagger_client.ApiCredential() # ApiCredential | - -try: - api_response = api_instance.create_credential(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling CredentialServiceApi->create_credential: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**ApiCredential**](ApiCredential.md)| | - -### Return type - -[**ApiCredential**](ApiCredential.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: application/json - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **delete_credential** -> delete_credential(id) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.CredentialServiceApi() -id = 'id_example' # str | - -try: - api_instance.delete_credential(id) -except ApiException as e: - print("Exception when calling CredentialServiceApi->delete_credential: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_credential** -> ApiCredential get_credential(id) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.CredentialServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_credential(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling CredentialServiceApi->get_credential: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiCredential**](ApiCredential.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **list_credentials** -> ApiListCredentialsResponse list_credentials(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.CredentialServiceApi() -page_token = 'page_token_example' # str | (optional) -page_size = 56 # int | (optional) -sort_by = 'name' # str | Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. (optional) -filter = '{"name": "test"}' # str | A string-serialized JSON dictionary with key-value pairs that correspond to the Credential's attribute names and their respective values to be filtered for. (optional) - -try: - api_response = api_instance.list_credentials(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - pprint(api_response) -except ApiException as e: - print("Exception when calling CredentialServiceApi->list_credentials: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **page_token** | **str**| | [optional] - **page_size** | **int**| | [optional] - **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. | [optional] - **filter** | **str**| A string-serialized JSON dictionary with key-value pairs that correspond to the Credential's attribute names and their respective values to be filtered for. | [optional] - -### Return type - -[**ApiListCredentialsResponse**](ApiListCredentialsResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/api/client/docs/DatasetServiceApi.md b/api/client/docs/DatasetServiceApi.md deleted file mode 100644 index 70b7f6c7..00000000 --- a/api/client/docs/DatasetServiceApi.md +++ /dev/null @@ -1,626 +0,0 @@ -# swagger_client.DatasetServiceApi - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**approve_datasets_for_publishing**](DatasetServiceApi.md#approve_datasets_for_publishing) | **POST** /datasets/publish_approved | -[**create_dataset**](DatasetServiceApi.md#create_dataset) | **POST** /datasets | -[**delete_dataset**](DatasetServiceApi.md#delete_dataset) | **DELETE** /datasets/{id} | -[**download_dataset_files**](DatasetServiceApi.md#download_dataset_files) | **GET** /datasets/{id}/download | Returns the dataset artifacts compressed into a .tgz (.tar.gz) file. -[**generate_dataset_code**](DatasetServiceApi.md#generate_dataset_code) | **GET** /datasets/{id}/generate_code | -[**get_dataset**](DatasetServiceApi.md#get_dataset) | **GET** /datasets/{id} | -[**get_dataset_template**](DatasetServiceApi.md#get_dataset_template) | **GET** /datasets/{id}/templates | -[**list_datasets**](DatasetServiceApi.md#list_datasets) | **GET** /datasets | -[**run_dataset**](DatasetServiceApi.md#run_dataset) | **POST** /datasets/{id}/run | -[**set_featured_datasets**](DatasetServiceApi.md#set_featured_datasets) | **POST** /datasets/featured | -[**upload_dataset**](DatasetServiceApi.md#upload_dataset) | **POST** /datasets/upload | -[**upload_dataset_file**](DatasetServiceApi.md#upload_dataset_file) | **POST** /datasets/{id}/upload | -[**upload_dataset_from_url**](DatasetServiceApi.md#upload_dataset_from_url) | **POST** /datasets/upload_from_url | - - -# **approve_datasets_for_publishing** -> approve_datasets_for_publishing(dataset_ids) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -dataset_ids = [swagger_client.list[str]()] # list[str] | Array of dataset IDs to be approved for publishing. - -try: - api_instance.approve_datasets_for_publishing(dataset_ids) -except ApiException as e: - print("Exception when calling DatasetServiceApi->approve_datasets_for_publishing: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **dataset_ids** | **list[str]**| Array of dataset IDs to be approved for publishing. | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **create_dataset** -> ApiDataset create_dataset(body) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -body = swagger_client.ApiDataset() # ApiDataset | - -try: - api_response = api_instance.create_dataset(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling DatasetServiceApi->create_dataset: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**ApiDataset**](ApiDataset.md)| | - -### Return type - -[**ApiDataset**](ApiDataset.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **delete_dataset** -> delete_dataset(id) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -id = 'id_example' # str | - -try: - api_instance.delete_dataset(id) -except ApiException as e: - print("Exception when calling DatasetServiceApi->delete_dataset: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **download_dataset_files** -> file download_dataset_files(id, include_generated_code=include_generated_code) - -Returns the dataset artifacts compressed into a .tgz (.tar.gz) file. - -### Example -```python -import swagger_client -from swagger_client.rest import ApiException -from urllib3.response import HTTPResponse - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -dataset_id = 'aetr91-aui3vc' -include_generated_code = True # include generated pipeline DSL script in download file (optional, default: False) -tarfile_path = f'download/dataset_{dataset_id}.tgz' - -try: - # Returns the dataset artifacts compressed into a .tgz (.tar.gz) file. - response: HTTPResponse = api_instance.\ - download_dataset_files(dataset_id, - include_generated_code=include_generated_code, - __preload_content=False) - with open(tarfile_path, 'wb') as f: - f.write(response.read()) -except ApiException as e: - print("Exception when calling DatasetServiceApi->download_dataset_files: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - **include_generated_code** | **bool**| Include generated run script in download | [optional] [default to false] - -### Return type - -**file** - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: application/gzip - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **generate_dataset_code** -> ApiGenerateCodeResponse generate_dataset_code(id) - - - -Generate sample code to use dataset in a pipeline - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.generate_dataset_code(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling DatasetServiceApi->generate_dataset_code: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiGenerateCodeResponse**](ApiGenerateCodeResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_dataset** -> ApiDataset get_dataset(id) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_dataset(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling DatasetServiceApi->get_dataset: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiDataset**](ApiDataset.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_dataset_template** -> ApiGetTemplateResponse get_dataset_template(id) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_dataset_template(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling DatasetServiceApi->get_dataset_template: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiGetTemplateResponse**](ApiGetTemplateResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **list_datasets** -> ApiListDatasetsResponse list_datasets(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -page_token = 'page_token_example' # str | (optional) -page_size = 56 # int | (optional) -sort_by = 'sort_by_example' # str | Can be format of 'field_name', 'field_name asc' or 'field_name desc'. Ascending by default. (optional) -filter = 'filter_example' # str | A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. (optional) - -try: - api_response = api_instance.list_datasets(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - pprint(api_response) -except ApiException as e: - print("Exception when calling DatasetServiceApi->list_datasets: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **page_token** | **str**| | [optional] - **page_size** | **int**| | [optional] - **sort_by** | **str**| Can be format of 'field_name', 'field_name asc' or 'field_name desc'. Ascending by default. | [optional] - **filter** | **str**| A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. | [optional] - -### Return type - -[**ApiListDatasetsResponse**](ApiListDatasetsResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **run_dataset** -> ApiRunCodeResponse run_dataset(id, parameters=parameters, run_name=run_name) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -id = 'id_example' # str | -parameters = [swagger_client.ApiParameter()] # list[ApiParameter] | (optional) -run_name = 'run_name_example' # str | name to identify the run on the Kubeflow Pipelines UI, defaults to component name (optional) - -try: - api_response = api_instance.run_dataset(id, parameters=parameters, run_name=run_name) - pprint(api_response) -except ApiException as e: - print("Exception when calling DatasetServiceApi->run_dataset: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - **parameters** | [**list[ApiParameter]**](ApiParameter.md)| | [optional] - **run_name** | **str**| name to identify the run on the Kubeflow Pipelines UI, defaults to component name | [optional] - -### Return type - -[**ApiRunCodeResponse**](ApiRunCodeResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **set_featured_datasets** -> set_featured_datasets(dataset_ids) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -dataset_ids = [swagger_client.list[str]()] # list[str] | Array of dataset IDs to be featured. - -try: - api_instance.set_featured_datasets(dataset_ids) -except ApiException as e: - print("Exception when calling DatasetServiceApi->set_featured_datasets: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **dataset_ids** | **list[str]**| Array of dataset IDs to be featured. | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_dataset** -> ApiDataset upload_dataset(uploadfile, name=name) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -uploadfile = '/path/to/file.txt' # file | The dataset YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. -name = 'name_example' # str | (optional) - -try: - api_response = api_instance.upload_dataset(uploadfile, name=name) - pprint(api_response) -except ApiException as e: - print("Exception when calling DatasetServiceApi->upload_dataset: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **uploadfile** | **file**| The dataset YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. | - **name** | **str**| | [optional] - -### Return type - -[**ApiDataset**](ApiDataset.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_dataset_file** -> ApiDataset upload_dataset_file(id, uploadfile) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -id = 'id_example' # str | The id of the dataset. -uploadfile = '/path/to/file.txt' # file | The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - -try: - api_response = api_instance.upload_dataset_file(id, uploadfile) - pprint(api_response) -except ApiException as e: - print("Exception when calling DatasetServiceApi->upload_dataset_file: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| The id of the dataset. | - **uploadfile** | **file**| The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) | - -### Return type - -[**ApiDataset**](ApiDataset.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_dataset_from_url** -> ApiDataset upload_dataset_from_url(url, name=name, access_token=access_token) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.DatasetServiceApi() -url = 'url_example' # str | URL pointing to the dataset YAML file. -name = 'name_example' # str | Optional, the name of the dataset to be created overriding the name in the YAML file. (optional) -access_token = 'access_token_example' # str | Optional, the Bearer token to access the 'url'. (optional) - -try: - api_response = api_instance.upload_dataset_from_url(url, name=name, access_token=access_token) - pprint(api_response) -except ApiException as e: - print("Exception when calling DatasetServiceApi->upload_dataset_from_url: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **url** | **str**| URL pointing to the dataset YAML file. | - **name** | **str**| Optional, the name of the dataset to be created overriding the name in the YAML file. | [optional] - **access_token** | **str**| Optional, the Bearer token to access the 'url'. | [optional] - -### Return type - -[**ApiDataset**](ApiDataset.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/api/client/docs/Dictionary.md b/api/client/docs/Dictionary.md deleted file mode 100644 index 7322ba0d..00000000 --- a/api/client/docs/Dictionary.md +++ /dev/null @@ -1,9 +0,0 @@ -# Dictionary - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/docs/HealthCheckApi.md b/api/client/docs/HealthCheckApi.md deleted file mode 100644 index 717c6004..00000000 --- a/api/client/docs/HealthCheckApi.md +++ /dev/null @@ -1,56 +0,0 @@ -# swagger_client.HealthCheckApi - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**health_check**](HealthCheckApi.md#health_check) | **GET** /health_check | Checks if the server is running - - -# **health_check** -> health_check(check_database=check_database, check_object_store=check_object_store) - -Checks if the server is running - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.HealthCheckApi() -check_database = true # bool | Test connection to MySQL database (optional) -check_object_store = true # bool | Test connection to Minio object store (optional) - -try: - # Checks if the server is running - api_instance.health_check(check_database=check_database, check_object_store=check_object_store) -except ApiException as e: - print("Exception when calling HealthCheckApi->health_check: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **check_database** | **bool**| Test connection to MySQL database | [optional] - **check_object_store** | **bool**| Test connection to Minio object store | [optional] - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/api/client/docs/InferenceServiceApi.md b/api/client/docs/InferenceServiceApi.md deleted file mode 100644 index 877add02..00000000 --- a/api/client/docs/InferenceServiceApi.md +++ /dev/null @@ -1,208 +0,0 @@ -# swagger_client.InferenceServiceApi - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**create_service**](InferenceServiceApi.md#create_service) | **POST** /inferenceservices | -[**get_inferenceservices**](InferenceServiceApi.md#get_inferenceservices) | **GET** /inferenceservices/{id} | -[**list_inferenceservices**](InferenceServiceApi.md#list_inferenceservices) | **GET** /inferenceservices | -[**upload_service**](InferenceServiceApi.md#upload_service) | **POST** /inferenceservices/upload | - - -# **create_service** -> ApiInferenceservice create_service(body, namespace=namespace) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.InferenceServiceApi() -body = swagger_client.ApiInferenceservice() # ApiInferenceservice | -namespace = 'namespace_example' # str | (optional) - -try: - api_response = api_instance.create_service(body, namespace=namespace) - pprint(api_response) -except ApiException as e: - print("Exception when calling InferenceServiceApi->create_service: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**ApiInferenceservice**](ApiInferenceservice.md)| | - **namespace** | **str**| | [optional] - -### Return type - -[**ApiInferenceservice**](ApiInferenceservice.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_inferenceservices** -> ApiInferenceservice get_inferenceservices(id, namespace=namespace) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.InferenceServiceApi() -id = 'id_example' # str | -namespace = 'namespace_example' # str | (optional) - -try: - api_response = api_instance.get_inferenceservices(id, namespace=namespace) - pprint(api_response) -except ApiException as e: - print("Exception when calling InferenceServiceApi->get_inferenceservices: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - **namespace** | **str**| | [optional] - -### Return type - -[**ApiInferenceservice**](ApiInferenceservice.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **list_inferenceservices** -> ApiListInferenceservicesResponse list_inferenceservices(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter, namespace=namespace) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.InferenceServiceApi() -page_token = 'page_token_example' # str | (optional) -page_size = 56 # int | (optional) -sort_by = 'name' # str | Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. (optional) -filter = '{"name": "test"}' # str | A string-serialized JSON dictionary with key-value pairs that correspond to the InferenceService's attribute names and their respective values to be filtered for. (optional) -namespace = 'kubeflow' # str | (optional) - -try: - api_response = api_instance.list_inferenceservices(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter, namespace=namespace) - pprint(api_response) -except ApiException as e: - print("Exception when calling InferenceServiceApi->list_inferenceservices: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **page_token** | **str**| | [optional] - **page_size** | **int**| | [optional] - **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. | [optional] - **filter** | **str**| A string-serialized JSON dictionary with key-value pairs that correspond to the InferenceService's attribute names and their respective values to be filtered for. | [optional] - **namespace** | **str**| | [optional] - -### Return type - -[**ApiListInferenceservicesResponse**](ApiListInferenceservicesResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_service** -> ApiInferenceservice upload_service(uploadfile, name=name, namespace=namespace) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.InferenceServiceApi() -uploadfile = '/path/to/file.txt' # file | The inference service metadata to upload. Maximum size of 32MB is supported. -name = 'my inference service' # str | (optional) -namespace = 'kubeflow' # str | (optional) - -try: - api_response = api_instance.upload_service(uploadfile, name=name, namespace=namespace) - pprint(api_response) -except ApiException as e: - print("Exception when calling InferenceServiceApi->upload_service: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **uploadfile** | **file**| The inference service metadata to upload. Maximum size of 32MB is supported. | - **name** | **str**| | [optional] - **namespace** | **str**| | [optional] - -### Return type - -[**ApiInferenceservice**](ApiInferenceservice.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/api/client/docs/ModelServiceApi.md b/api/client/docs/ModelServiceApi.md deleted file mode 100644 index 6f8a4c32..00000000 --- a/api/client/docs/ModelServiceApi.md +++ /dev/null @@ -1,624 +0,0 @@ -# swagger_client.ModelServiceApi - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**approve_models_for_publishing**](ModelServiceApi.md#approve_models_for_publishing) | **POST** /models/publish_approved | -[**create_model**](ModelServiceApi.md#create_model) | **POST** /models | -[**delete_model**](ModelServiceApi.md#delete_model) | **DELETE** /models/{id} | -[**download_model_files**](ModelServiceApi.md#download_model_files) | **GET** /models/{id}/download | Returns the model artifacts compressed into a .tgz (.tar.gz) file. -[**generate_model_code**](ModelServiceApi.md#generate_model_code) | **GET** /models/{id}/generate_code | -[**get_model**](ModelServiceApi.md#get_model) | **GET** /models/{id} | -[**get_model_template**](ModelServiceApi.md#get_model_template) | **GET** /models/{id}/templates | -[**list_models**](ModelServiceApi.md#list_models) | **GET** /models | -[**run_model**](ModelServiceApi.md#run_model) | **POST** /models/{id}/run | -[**set_featured_models**](ModelServiceApi.md#set_featured_models) | **POST** /models/featured | -[**upload_model**](ModelServiceApi.md#upload_model) | **POST** /models/upload | -[**upload_model_file**](ModelServiceApi.md#upload_model_file) | **POST** /models/{id}/upload | -[**upload_model_from_url**](ModelServiceApi.md#upload_model_from_url) | **POST** /models/upload_from_url | - - -# **approve_models_for_publishing** -> approve_models_for_publishing(model_ids) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -model_ids = [swagger_client.list[str]()] # list[str] | Array of model IDs to be approved for publishing. - -try: - api_instance.approve_models_for_publishing(model_ids) -except ApiException as e: - print("Exception when calling ModelServiceApi->approve_models_for_publishing: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **model_ids** | **list[str]**| Array of model IDs to be approved for publishing. | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **create_model** -> ApiModel create_model(body) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -body = swagger_client.ApiModel() # ApiModel | - -try: - api_response = api_instance.create_model(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling ModelServiceApi->create_model: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**ApiModel**](ApiModel.md)| | - -### Return type - -[**ApiModel**](ApiModel.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **delete_model** -> delete_model(id) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -id = 'id_example' # str | - -try: - api_instance.delete_model(id) -except ApiException as e: - print("Exception when calling ModelServiceApi->delete_model: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **download_model_files** -> file download_model_files(id, include_generated_code=include_generated_code) - -Returns the model artifacts compressed into a .tgz (.tar.gz) file. - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from urllib3.response import HTTPResponse - - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -model_id = 'max-audio-classifier' # str -include_generated_code = True # bool | Include generated run scripts in download (optional) (default to false) -tarfile_path = f'download/{model_id}.tgz' - -try: - # Returns the model artifacts compressed into a .tgz (.tag.gz) file. - response: HTTPResponse = \ - api_instance.download_model_files(model_id, - include_generated_code=include_generated_code, - _preload_content=False) - with open(tarfile_path, 'wb') as f: - f.write(response.read()) -except ApiException as e: - print("Exception when calling ModelServiceApi->download_model_files: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - **include_generated_code** | **bool**| Include generated run scripts in download | [optional] [default to false] - -### Return type - -**file** - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: application/gzip - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **generate_model_code** -> ApiGenerateModelCodeResponse generate_model_code(id) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.generate_model_code(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ModelServiceApi->generate_model_code: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiGenerateModelCodeResponse**](ApiGenerateModelCodeResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_model** -> ApiModel get_model(id) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_model(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ModelServiceApi->get_model: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiModel**](ApiModel.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_model_template** -> ApiGetTemplateResponse get_model_template(id) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_model_template(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling ModelServiceApi->get_model_template: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiGetTemplateResponse**](ApiGetTemplateResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **list_models** -> ApiListModelsResponse list_models(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -page_token = 'page_token_example' # str | (optional) -page_size = 56 # int | (optional) -sort_by = 'name' # str | Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. (optional) -filter = '{"name": "test"}' # str | A string-serialized JSON dictionary with key-value pairs that correspond to the Model's attribute names and their respective values to be filtered for. (optional) - -try: - api_response = api_instance.list_models(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - pprint(api_response) -except ApiException as e: - print("Exception when calling ModelServiceApi->list_models: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **page_token** | **str**| | [optional] - **page_size** | **int**| | [optional] - **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. | [optional] - **filter** | **str**| A string-serialized JSON dictionary with key-value pairs that correspond to the Model's attribute names and their respective values to be filtered for. | [optional] - -### Return type - -[**ApiListModelsResponse**](ApiListModelsResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **run_model** -> ApiRunCodeResponse run_model(id, pipeline_stage, execution_platform, run_name=run_name, parameters=parameters) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -id = 'id_example' # str | -pipeline_stage = 'pipeline_stage_example' # str | pipeline stage, either 'train' or 'serve' -execution_platform = 'execution_platform_example' # str | execution platform, i.e. 'kubernetes', 'knative' -run_name = 'run_name_example' # str | name to identify the run on the Kubeflow Pipelines UI, defaults to model identifier (optional) -parameters = swagger_client.Dictionary() # Dictionary | optional run parameters, must include 'github_url' and 'github_token' if credentials are required (optional) - -try: - api_response = api_instance.run_model(id, pipeline_stage, execution_platform, run_name=run_name, parameters=parameters) - pprint(api_response) -except ApiException as e: - print("Exception when calling ModelServiceApi->run_model: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - **pipeline_stage** | **str**| pipeline stage, either 'train' or 'serve' | - **execution_platform** | **str**| execution platform, i.e. 'kubernetes', 'knative' | - **run_name** | **str**| name to identify the run on the Kubeflow Pipelines UI, defaults to model identifier | [optional] - **parameters** | [**Dictionary**](Dictionary.md)| optional run parameters, must include 'github_url' and 'github_token' if credentials are required | [optional] - -### Return type - -[**ApiRunCodeResponse**](ApiRunCodeResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **set_featured_models** -> set_featured_models(model_ids) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -model_ids = [swagger_client.list[str]()] # list[str] | Array of model IDs to be featured. - -try: - api_instance.set_featured_models(model_ids) -except ApiException as e: - print("Exception when calling ModelServiceApi->set_featured_models: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **model_ids** | **list[str]**| Array of model IDs to be featured. | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_model** -> ApiModel upload_model(uploadfile, name=name) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -uploadfile = '/path/to/file.txt' # file | The model YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. -name = 'my model' # str | (optional) - -try: - api_response = api_instance.upload_model(uploadfile, name=name) - pprint(api_response) -except ApiException as e: - print("Exception when calling ModelServiceApi->upload_model: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **uploadfile** | **file**| The model YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. | - **name** | **str**| | [optional] - -### Return type - -[**ApiModel**](ApiModel.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_model_file** -> ApiModel upload_model_file(id, uploadfile) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -id = 'id_example' # str | The model identifier. -uploadfile = '/path/to/file.txt' # file | The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - -try: - api_response = api_instance.upload_model_file(id, uploadfile) - pprint(api_response) -except ApiException as e: - print("Exception when calling ModelServiceApi->upload_model_file: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| The model identifier. | - **uploadfile** | **file**| The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) | - -### Return type - -[**ApiModel**](ApiModel.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_model_from_url** -> ApiModel upload_model_from_url(url, name=name, access_token=access_token) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.ModelServiceApi() -url = 'url_example' # str | URL pointing to the model YAML file. -name = 'name_example' # str | Optional, the name of the model to be created overriding the name in the YAML file. (optional) -access_token = 'access_token_example' # str | Optional, the Bearer token to access the 'url'. (optional) - -try: - api_response = api_instance.upload_model_from_url(url, name=name, access_token=access_token) - pprint(api_response) -except ApiException as e: - print("Exception when calling ModelServiceApi->upload_model_from_url: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **url** | **str**| URL pointing to the model YAML file. | - **name** | **str**| Optional, the name of the model to be created overriding the name in the YAML file. | [optional] - **access_token** | **str**| Optional, the Bearer token to access the 'url'. | [optional] - -### Return type - -[**ApiModel**](ApiModel.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/api/client/docs/NotebookServiceApi.md b/api/client/docs/NotebookServiceApi.md deleted file mode 100644 index d2abaa9c..00000000 --- a/api/client/docs/NotebookServiceApi.md +++ /dev/null @@ -1,625 +0,0 @@ -# swagger_client.NotebookServiceApi - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**approve_notebooks_for_publishing**](NotebookServiceApi.md#approve_notebooks_for_publishing) | **POST** /notebooks/publish_approved | -[**create_notebook**](NotebookServiceApi.md#create_notebook) | **POST** /notebooks | -[**delete_notebook**](NotebookServiceApi.md#delete_notebook) | **DELETE** /notebooks/{id} | -[**download_notebook_files**](NotebookServiceApi.md#download_notebook_files) | **GET** /notebooks/{id}/download | Returns the notebook artifacts compressed into a .tgz (.tar.gz) file. -[**generate_notebook_code**](NotebookServiceApi.md#generate_notebook_code) | **GET** /notebooks/{id}/generate_code | -[**get_notebook**](NotebookServiceApi.md#get_notebook) | **GET** /notebooks/{id} | -[**get_notebook_template**](NotebookServiceApi.md#get_notebook_template) | **GET** /notebooks/{id}/templates | -[**list_notebooks**](NotebookServiceApi.md#list_notebooks) | **GET** /notebooks | -[**run_notebook**](NotebookServiceApi.md#run_notebook) | **POST** /notebooks/{id}/run | -[**set_featured_notebooks**](NotebookServiceApi.md#set_featured_notebooks) | **POST** /notebooks/featured | -[**upload_notebook**](NotebookServiceApi.md#upload_notebook) | **POST** /notebooks/upload | -[**upload_notebook_file**](NotebookServiceApi.md#upload_notebook_file) | **POST** /notebooks/{id}/upload | -[**upload_notebook_from_url**](NotebookServiceApi.md#upload_notebook_from_url) | **POST** /notebooks/upload_from_url | - - -# **approve_notebooks_for_publishing** -> approve_notebooks_for_publishing(notebook_ids) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -notebook_ids = [swagger_client.list[str]()] # list[str] | Array of notebook IDs to be approved for publishing. - -try: - api_instance.approve_notebooks_for_publishing(notebook_ids) -except ApiException as e: - print("Exception when calling NotebookServiceApi->approve_notebooks_for_publishing: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **notebook_ids** | **list[str]**| Array of notebook IDs to be approved for publishing. | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **create_notebook** -> ApiNotebook create_notebook(body) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -body = swagger_client.ApiNotebook() # ApiNotebook | - -try: - api_response = api_instance.create_notebook(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling NotebookServiceApi->create_notebook: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**ApiNotebook**](ApiNotebook.md)| | - -### Return type - -[**ApiNotebook**](ApiNotebook.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **delete_notebook** -> delete_notebook(id) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -id = 'id_example' # str | - -try: - api_instance.delete_notebook(id) -except ApiException as e: - print("Exception when calling NotebookServiceApi->delete_notebook: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **download_notebook_files** -> file download_notebook_files(id, include_generated_code=include_generated_code) - -Returns the notebook artifacts compressed into a .tgz (.tar.gz) file. - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from urllib3.response import HTTPResponse - - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -notebook_id = 'ye-23fg0-2ic8' # str -include_generated_code = True # bool | Include generated run script in download (optional) (default to false) -tarfile_path = f'download/notebook_{notebook_id}.tgz' - -try: - # Returns the notebook artifacts compressed into a .tgz (.tar.gz) file. - response: HTTPResponse = \ - api_instance.download_notebook_files(notebook_id, - include_generated_code=include_generated_code, - _preload_content=False) - with open(tarfile_path, 'wb') as f: - f.write(response.read()) -except ApiException as e: - print("Exception when calling NotebookServiceApi->download_notebook_files: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - **include_generated_code** | **bool**| Include generated run script in download | [optional] [default to false] - -### Return type - -**file** - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: application/gzip - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **generate_notebook_code** -> ApiGenerateCodeResponse generate_notebook_code(id) - - - -Generate sample code to use notebook in a pipeline - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.generate_notebook_code(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling NotebookServiceApi->generate_notebook_code: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiGenerateCodeResponse**](ApiGenerateCodeResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_notebook** -> ApiNotebook get_notebook(id) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_notebook(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling NotebookServiceApi->get_notebook: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiNotebook**](ApiNotebook.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_notebook_template** -> ApiGetTemplateResponse get_notebook_template(id) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_notebook_template(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling NotebookServiceApi->get_notebook_template: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiGetTemplateResponse**](ApiGetTemplateResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **list_notebooks** -> ApiListNotebooksResponse list_notebooks(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -page_token = 'page_token_example' # str | (optional) -page_size = 56 # int | (optional) -sort_by = 'name' # str | Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. (optional) -filter = '{"name": "my notebook"}' # str | A string-serialized JSON dictionary with key-value pairs that correspond to the Notebook's attribute names and their respective values to be filtered for. (optional) - -try: - api_response = api_instance.list_notebooks(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - pprint(api_response) -except ApiException as e: - print("Exception when calling NotebookServiceApi->list_notebooks: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **page_token** | **str**| | [optional] - **page_size** | **int**| | [optional] - **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. | [optional] - **filter** | **str**| A string-serialized JSON dictionary with key-value pairs that correspond to the Notebook's attribute names and their respective values to be filtered for. | [optional] - -### Return type - -[**ApiListNotebooksResponse**](ApiListNotebooksResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **run_notebook** -> ApiRunCodeResponse run_notebook(id, run_name=run_name, parameters=parameters) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -id = 'id_example' # str | -run_name = 'run_name_example' # str | name to identify the run on the Kubeflow Pipelines UI, defaults to notebook name (optional) -parameters = dict() # dict | optional run parameters, may be required based on pipeline definition (optional) - -try: - api_response = api_instance.run_notebook(id, run_name=run_name, parameters=parameters) - pprint(api_response) -except ApiException as e: - print("Exception when calling NotebookServiceApi->run_notebook: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - **run_name** | **str**| name to identify the run on the Kubeflow Pipelines UI, defaults to notebook name | [optional] - **parameters** | [**Dictionary**](Dictionary.md)| optional run parameters, may be required based on pipeline definition | [optional] - -### Return type - -[**ApiRunCodeResponse**](ApiRunCodeResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **set_featured_notebooks** -> set_featured_notebooks(notebook_ids) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -notebook_ids = [swagger_client.list[str]()] # list[str] | Array of notebook IDs to be featured. - -try: - api_instance.set_featured_notebooks(notebook_ids) -except ApiException as e: - print("Exception when calling NotebookServiceApi->set_featured_notebooks: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **notebook_ids** | **list[str]**| Array of notebook IDs to be featured. | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_notebook** -> ApiNotebook upload_notebook(uploadfile, name=name, enterprise_github_token=enterprise_github_token) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -uploadfile = '/path/to/file.txt' # file | The notebook metadata YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. -name = 'name_example' # str | (optional) -enterprise_github_token = 'enterprise_github_token_example' # str | Optional GitHub API token providing read-access to notebooks stored on Enterprise GitHub accounts. (optional) - -try: - api_response = api_instance.upload_notebook(uploadfile, name=name, enterprise_github_token=enterprise_github_token) - pprint(api_response) -except ApiException as e: - print("Exception when calling NotebookServiceApi->upload_notebook: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **uploadfile** | **file**| The notebook metadata YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. | - **name** | **str**| | [optional] - **enterprise_github_token** | **str**| Optional GitHub API token providing read-access to notebooks stored on Enterprise GitHub accounts. | [optional] - -### Return type - -[**ApiNotebook**](ApiNotebook.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_notebook_file** -> ApiNotebook upload_notebook_file(id, uploadfile) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -id = 'id_example' # str | The id of the notebook. -uploadfile = '/path/to/file.txt' # file | The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - -try: - api_response = api_instance.upload_notebook_file(id, uploadfile) - pprint(api_response) -except ApiException as e: - print("Exception when calling NotebookServiceApi->upload_notebook_file: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| The id of the notebook. | - **uploadfile** | **file**| The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) | - -### Return type - -[**ApiNotebook**](ApiNotebook.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_notebook_from_url** -> ApiNotebook upload_notebook_from_url(url, name=name, access_token=access_token) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.NotebookServiceApi() -url = 'url_example' # str | URL pointing to the notebook YAML file. -name = 'name_example' # str | Optional, the name of the notebook to be created overriding the name in the YAML file. (optional) -access_token = 'access_token_example' # str | Optional, the Bearer token to access the 'url'. (optional) - -try: - api_response = api_instance.upload_notebook_from_url(url, name=name, access_token=access_token) - pprint(api_response) -except ApiException as e: - print("Exception when calling NotebookServiceApi->upload_notebook_from_url: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **url** | **str**| URL pointing to the notebook YAML file. | - **name** | **str**| Optional, the name of the notebook to be created overriding the name in the YAML file. | [optional] - **access_token** | **str**| Optional, the Bearer token to access the 'url'. | [optional] - -### Return type - -[**ApiNotebook**](ApiNotebook.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/api/client/docs/PipelineServiceApi.md b/api/client/docs/PipelineServiceApi.md deleted file mode 100644 index 2999cdb0..00000000 --- a/api/client/docs/PipelineServiceApi.md +++ /dev/null @@ -1,583 +0,0 @@ -# swagger_client.PipelineServiceApi - -All URIs are relative to *http://localhost/apis/v1alpha1* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**approve_pipelines_for_publishing**](PipelineServiceApi.md#approve_pipelines_for_publishing) | **POST** /pipelines/publish_approved | -[**create_pipeline**](PipelineServiceApi.md#create_pipeline) | **POST** /pipelines | -[**delete_pipeline**](PipelineServiceApi.md#delete_pipeline) | **DELETE** /pipelines/{id} | -[**download_pipeline_files**](PipelineServiceApi.md#download_pipeline_files) | **GET** /pipelines/{id}/download | Returns the pipeline YAML compressed into a .tgz (.tar.gz) file. -[**get_pipeline**](PipelineServiceApi.md#get_pipeline) | **GET** /pipelines/{id} | -[**get_template**](PipelineServiceApi.md#get_template) | **GET** /pipelines/{id}/templates | -[**list_pipelines**](PipelineServiceApi.md#list_pipelines) | **GET** /pipelines | -[**run_custom_pipeline**](PipelineServiceApi.md#run_custom_pipeline) | **POST** /pipelines/run_custom_pipeline | -[**run_pipeline**](PipelineServiceApi.md#run_pipeline) | **POST** /pipelines/{id}/run | -[**set_featured_pipelines**](PipelineServiceApi.md#set_featured_pipelines) | **POST** /pipelines/featured | -[**upload_pipeline**](PipelineServiceApi.md#upload_pipeline) | **POST** /pipelines/upload | -[**upload_pipeline_from_url**](PipelineServiceApi.md#upload_pipeline_from_url) | **POST** /pipelines/upload_from_url | - - -# **approve_pipelines_for_publishing** -> approve_pipelines_for_publishing(pipeline_ids) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -pipeline_ids = [swagger_client.list[str]()] # list[str] | Array of pipeline IDs to be approved for publishing. - -try: - api_instance.approve_pipelines_for_publishing(pipeline_ids) -except ApiException as e: - print("Exception when calling PipelineServiceApi->approve_pipelines_for_publishing: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **pipeline_ids** | **list[str]**| Array of pipeline IDs to be approved for publishing. | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **create_pipeline** -> ApiPipeline create_pipeline(body) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -body = swagger_client.ApiPipeline() # ApiPipeline | - -try: - api_response = api_instance.create_pipeline(body) - pprint(api_response) -except ApiException as e: - print("Exception when calling PipelineServiceApi->create_pipeline: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **body** | [**ApiPipeline**](ApiPipeline.md)| | - -### Return type - -[**ApiPipeline**](ApiPipeline.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **delete_pipeline** -> delete_pipeline(id) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -id = 'id_example' # str | - -try: - api_instance.delete_pipeline(id) -except ApiException as e: - print("Exception when calling PipelineServiceApi->delete_pipeline: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **download_pipeline_files** -> file download_pipeline_files(id) - -Returns the pipeline YAML compressed into a .tgz (.tar.gz) file. - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from urllib3.response import HTTPResponse - - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -id = 'wer32ia-de14n2-rDN1e34' -tarfile_path = f'download/pipeline_{id}.tgz' - -try: - # Returns the pipeline YAML compressed into a .tgz (.tar.gz) file. - response: HTTPResponse = \ - api_instance.download_pipeline_files(id, _preload_content=False) - with open(tarfile_path, 'wb') as f: - f.write(response.read()) -except ApiException as e: - print("Exception when calling PipelineServiceApi->download_pipeline_files: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -**file** - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: application/gzip - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_pipeline** -> ApiPipelineExtended get_pipeline(id) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_pipeline(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling PipelineServiceApi->get_pipeline: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiPipelineExtended**](ApiPipelineExtended.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **get_template** -> ApiGetTemplateResponse get_template(id) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -id = 'id_example' # str | - -try: - api_response = api_instance.get_template(id) - pprint(api_response) -except ApiException as e: - print("Exception when calling PipelineServiceApi->get_template: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - -### Return type - -[**ApiGetTemplateResponse**](ApiGetTemplateResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **list_pipelines** -> ApiListPipelinesResponse list_pipelines(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -page_token = 'page_token_example' # str | (optional) -page_size = 56 # int | (optional) -sort_by = 'name' # str | Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. (optional) -filter = '{"name": "my pipeline"}' # str | A string-serialized JSON dictionary with key-value pairs that correspond to the Pipeline's attribute names and their respective values to be filtered for. (optional) - -try: - api_response = api_instance.list_pipelines(page_token=page_token, page_size=page_size, sort_by=sort_by, filter=filter) - pprint(api_response) -except ApiException as e: - print("Exception when calling PipelineServiceApi->list_pipelines: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **page_token** | **str**| | [optional] - **page_size** | **int**| | [optional] - **sort_by** | **str**| Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. | [optional] - **filter** | **str**| A string-serialized JSON dictionary with key-value pairs that correspond to the Pipeline's attribute names and their respective values to be filtered for. | [optional] - -### Return type - -[**ApiListPipelinesResponse**](ApiListPipelinesResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **run_custom_pipeline** -> ApiRunCodeResponse run_custom_pipeline(run_custom_pipeline_payload, run_name=run_name) - - - -Run a complex pipeline defined by a directed acyclic graph (DAG) - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -run_custom_pipeline_payload = swagger_client.ApiPipelineCustomRunPayload() # ApiPipelineCustomRunPayload | A custom pipeline defined by a directed acyclic graph (DAG) and input parameters -run_name = 'run_name_example' # str | Name to identify the run on the Kubeflow Pipelines UI (optional) - -try: - api_response = api_instance.run_custom_pipeline(run_custom_pipeline_payload, run_name=run_name) - pprint(api_response) -except ApiException as e: - print("Exception when calling PipelineServiceApi->run_custom_pipeline: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **run_custom_pipeline_payload** | [**ApiPipelineCustomRunPayload**](ApiPipelineCustomRunPayload.md)| A custom pipeline defined by a directed acyclic graph (DAG) and input parameters | - **run_name** | **str**| Name to identify the run on the Kubeflow Pipelines UI | [optional] - -### Return type - -[**ApiRunCodeResponse**](ApiRunCodeResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: application/json - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **run_pipeline** -> ApiRunCodeResponse run_pipeline(id, run_name=run_name, parameters=parameters) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -id = 'id_example' # str | -run_name = 'run_name_example' # str | name to identify the run on the Kubeflow Pipelines UI, defaults to pipeline name (optional) -parameters = swagger_client.Dictionary() # Dictionary | optional run parameters, may be required based on pipeline definition (optional) - -try: - api_response = api_instance.run_pipeline(id, run_name=run_name, parameters=parameters) - pprint(api_response) -except ApiException as e: - print("Exception when calling PipelineServiceApi->run_pipeline: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **id** | **str**| | - **run_name** | **str**| name to identify the run on the Kubeflow Pipelines UI, defaults to pipeline name | [optional] - **parameters** | [**Dictionary**](Dictionary.md)| optional run parameters, may be required based on pipeline definition | [optional] - -### Return type - -[**ApiRunCodeResponse**](ApiRunCodeResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: application/json - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **set_featured_pipelines** -> set_featured_pipelines(pipeline_ids) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -pipeline_ids = [swagger_client.list[str]()] # list[str] | Array of pipeline IDs to be featured. - -try: - api_instance.set_featured_pipelines(pipeline_ids) -except ApiException as e: - print("Exception when calling PipelineServiceApi->set_featured_pipelines: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **pipeline_ids** | **list[str]**| Array of pipeline IDs to be featured. | - -### Return type - -void (empty response body) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: Not defined - - **Accept**: Not defined - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_pipeline** -> ApiPipelineExtended upload_pipeline(uploadfile, name=name, description=description, annotations=annotations) - - - -### Example -```python -from __future__ import print_function -import time -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -uploadfile = '/path/to/file.txt' # file | The pipeline YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. -name = 'name_example' # str | A name for this pipeline, optional (optional) -description = 'description_example' # str | A description for this pipeline, optional (optional) -annotations = 'annotations_example' # str | A string representation of a JSON dictionary of annotations describing this pipeline, optional. Example: {\"platform\": \"Kubeflow\", \"license\": \"Opensource\"} (optional) - -try: - api_response = api_instance.upload_pipeline(uploadfile, name=name, description=description, annotations=annotations) - pprint(api_response) -except ApiException as e: - print("Exception when calling PipelineServiceApi->upload_pipeline: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **uploadfile** | **file**| The pipeline YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. | - **name** | **str**| A name for this pipeline, optional | [optional] - **description** | **str**| A description for this pipeline, optional | [optional] - **annotations** | **str**| A string representation of a JSON dictionary of annotations describing this pipeline, optional. Example: {\"platform\": \"Kubeflow\", \"license\": \"Opensource\"} | [optional] - -### Return type - -[**ApiPipelineExtended**](ApiPipelineExtended.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **upload_pipeline_from_url** -> ApiPipeline upload_pipeline_from_url(url, name=name, access_token=access_token) - - - -### Example -```python -from __future__ import print_function -import swagger_client -from swagger_client.rest import ApiException -from pprint import pprint - -# create an instance of the API class -api_instance = swagger_client.PipelineServiceApi() -url = 'url_example' # str | URL pointing to the pipeline YAML file. -name = 'name_example' # str | Optional, the name of the pipeline to be created overriding the name in the YAML file. (optional) -access_token = 'access_token_example' # str | Optional, the Bearer token to access the 'url'. (optional) - -try: - api_response = api_instance.upload_pipeline_from_url(url, name=name, access_token=access_token) - pprint(api_response) -except ApiException as e: - print("Exception when calling PipelineServiceApi->upload_pipeline_from_url: %s\n" % e) -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **url** | **str**| URL pointing to the pipeline YAML file. | - **name** | **str**| Optional, the name of the pipeline to be created overriding the name in the YAML file. | [optional] - **access_token** | **str**| Optional, the Bearer token to access the 'url'. | [optional] - -### Return type - -[**ApiPipeline**](ApiPipeline.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: multipart/form-data - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/api/client/docs/ProtobufAny.md b/api/client/docs/ProtobufAny.md deleted file mode 100644 index 8a8cbc6f..00000000 --- a/api/client/docs/ProtobufAny.md +++ /dev/null @@ -1,11 +0,0 @@ -# ProtobufAny - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**type_url** | **str** | TODO | [optional] -**value** | **str** | Must be a valid serialized protocol buffer of the above specified type. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/api/client/requirements.txt b/api/client/requirements.txt deleted file mode 100644 index ae126033..00000000 --- a/api/client/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -setuptools>=41.2.0 - -six -python_dateutil>=2.8.1 -certifi - -#urllib3 >= 1.15.1 -#requests 2.21.0 has requirement urllib3<1.25,>=1.21.1 -# urllib3<1.25,>=1.21.1 -urllib3 diff --git a/api/client/setup.py b/api/client/setup.py deleted file mode 100644 index 78a12b14..00000000 --- a/api/client/setup.py +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from setuptools import setup, find_packages # noqa: H301 - -NAME = "mlx-client" -VERSION = "0.1.30-upload-catalog-from-url" -# To install the library, run the following -# -# python setup.py install -# -# prerequisite: setuptools -# http://pypi.python.org/pypi/setuptools - -REQUIRES = [ - "certifi>=2017.4.17", - "python-dateutil>=2.1", - "six>=1.10", - "urllib3>=1.23" -] - - -setup( - name=NAME, - version=VERSION, - description="MLX API Client", - license="Apache 2.0", - author_email="", - url="https://github.com/machine-learning-exchange/mlx", - keywords=["Swagger", "MLX API"], - install_requires=REQUIRES, - packages=find_packages(), - include_package_data=True, - long_description="""\ - Machine Learning Exchange API Client - """ -) diff --git a/api/client/swagger_client/__init__.py b/api/client/swagger_client/__init__.py deleted file mode 100644 index 223c01d6..00000000 --- a/api/client/swagger_client/__init__.py +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -# flake8: noqa - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -# import apis into sdk package -from swagger_client.api.application_settings_api import ApplicationSettingsApi -from swagger_client.api.catalog_service_api import CatalogServiceApi -from swagger_client.api.component_service_api import ComponentServiceApi -from swagger_client.api.credential_service_api import CredentialServiceApi -from swagger_client.api.dataset_service_api import DatasetServiceApi -from swagger_client.api.health_check_api import HealthCheckApi -from swagger_client.api.inference_service_api import InferenceServiceApi -from swagger_client.api.model_service_api import ModelServiceApi -from swagger_client.api.notebook_service_api import NotebookServiceApi -from swagger_client.api.pipeline_service_api import PipelineServiceApi - -# import ApiClient -from swagger_client.api_client import ApiClient -from swagger_client.configuration import Configuration -# import models into sdk package -from swagger_client.models.any_value import AnyValue -from swagger_client.models.api_access_token import ApiAccessToken -from swagger_client.models.api_asset import ApiAsset -from swagger_client.models.api_catalog_upload import ApiCatalogUpload -from swagger_client.models.api_catalog_upload_item import ApiCatalogUploadItem -from swagger_client.models.api_credential import ApiCredential -from swagger_client.models.api_generate_code_response import ApiGenerateCodeResponse -from swagger_client.models.api_generate_model_code_response import ApiGenerateModelCodeResponse -from swagger_client.models.api_get_template_response import ApiGetTemplateResponse -from swagger_client.models.api_inferenceservice import ApiInferenceservice -from swagger_client.models.api_list_catalog_items_response import ApiListCatalogItemsResponse -from swagger_client.models.api_list_catalog_upload_errors import ApiListCatalogUploadErrors -from swagger_client.models.api_list_components_response import ApiListComponentsResponse -from swagger_client.models.api_list_credentials_response import ApiListCredentialsResponse -from swagger_client.models.api_list_datasets_response import ApiListDatasetsResponse -from swagger_client.models.api_list_inferenceservices_response import ApiListInferenceservicesResponse -from swagger_client.models.api_list_models_response import ApiListModelsResponse -from swagger_client.models.api_list_notebooks_response import ApiListNotebooksResponse -from swagger_client.models.api_list_pipelines_response import ApiListPipelinesResponse -from swagger_client.models.api_metadata import ApiMetadata -from swagger_client.models.api_model_framework import ApiModelFramework -from swagger_client.models.api_model_framework_runtimes import ApiModelFrameworkRuntimes -from swagger_client.models.api_model_script import ApiModelScript -from swagger_client.models.api_parameter import ApiParameter -from swagger_client.models.api_pipeline import ApiPipeline -from swagger_client.models.api_pipeline_custom import ApiPipelineCustom -from swagger_client.models.api_pipeline_custom_run_payload import ApiPipelineCustomRunPayload -from swagger_client.models.api_pipeline_dag import ApiPipelineDAG -from swagger_client.models.api_pipeline_extension import ApiPipelineExtension -from swagger_client.models.api_pipeline_inputs import ApiPipelineInputs -from swagger_client.models.api_pipeline_task import ApiPipelineTask -from swagger_client.models.api_pipeline_task_arguments import ApiPipelineTaskArguments -from swagger_client.models.api_run_code_response import ApiRunCodeResponse -from swagger_client.models.api_settings import ApiSettings -from swagger_client.models.api_settings_section import ApiSettingsSection -from swagger_client.models.api_status import ApiStatus -from swagger_client.models.api_url import ApiUrl -from swagger_client.models.dictionary import Dictionary -from swagger_client.models.protobuf_any import ProtobufAny -from swagger_client.models.api_catalog_upload_error import ApiCatalogUploadError -from swagger_client.models.api_catalog_upload_response import ApiCatalogUploadResponse -from swagger_client.models.api_component import ApiComponent -from swagger_client.models.api_dataset import ApiDataset -from swagger_client.models.api_model import ApiModel -from swagger_client.models.api_notebook import ApiNotebook -from swagger_client.models.api_pipeline_extended import ApiPipelineExtended diff --git a/api/client/swagger_client/api/__init__.py b/api/client/swagger_client/api/__init__.py deleted file mode 100644 index 07303ee3..00000000 --- a/api/client/swagger_client/api/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import absolute_import - -# flake8: noqa - -# import apis into api package -from swagger_client.api.application_settings_api import ApplicationSettingsApi -from swagger_client.api.catalog_service_api import CatalogServiceApi -from swagger_client.api.component_service_api import ComponentServiceApi -from swagger_client.api.credential_service_api import CredentialServiceApi -from swagger_client.api.dataset_service_api import DatasetServiceApi -from swagger_client.api.health_check_api import HealthCheckApi -from swagger_client.api.inference_service_api import InferenceServiceApi -from swagger_client.api.model_service_api import ModelServiceApi -from swagger_client.api.notebook_service_api import NotebookServiceApi -from swagger_client.api.pipeline_service_api import PipelineServiceApi diff --git a/api/client/swagger_client/api/application_settings_api.py b/api/client/swagger_client/api/application_settings_api.py deleted file mode 100644 index 4e312b6e..00000000 --- a/api/client/swagger_client/api/application_settings_api.py +++ /dev/null @@ -1,322 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from swagger_client.api_client import ApiClient - - -class ApplicationSettingsApi(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def get_application_settings(self, **kwargs): # noqa: E501 - """get_application_settings # noqa: E501 - - Returns the application settings. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_application_settings(async_req=True) - >>> result = thread.get() - - :param async_req bool - :return: ApiSettings - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_application_settings_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.get_application_settings_with_http_info(**kwargs) # noqa: E501 - return data - - def get_application_settings_with_http_info(self, **kwargs): # noqa: E501 - """get_application_settings # noqa: E501 - - Returns the application settings. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_application_settings_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :return: ApiSettings - If the method is called asynchronously, - returns the request thread. - """ - - all_params = [] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_application_settings" % key - ) - params[key] = val - del params['kwargs'] - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/settings', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiSettings', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def modify_application_settings(self, dictionary, **kwargs): # noqa: E501 - """modify_application_settings # noqa: E501 - - Modify one or more of the application settings. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.modify_application_settings(dictionary, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param Dictionary dictionary: A dictionary where the name of the keys corresponds to the name of the settings. (required) - :return: ApiSettings - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.modify_application_settings_with_http_info(dictionary, **kwargs) # noqa: E501 - else: - (data) = self.modify_application_settings_with_http_info(dictionary, **kwargs) # noqa: E501 - return data - - def modify_application_settings_with_http_info(self, dictionary, **kwargs): # noqa: E501 - """modify_application_settings # noqa: E501 - - Modify one or more of the application settings. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.modify_application_settings_with_http_info(dictionary, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param Dictionary dictionary: A dictionary where the name of the keys corresponds to the name of the settings. (required) - :return: ApiSettings - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['dictionary'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method modify_application_settings" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'dictionary' is set - if ('dictionary' not in params or - params['dictionary'] is None): - raise ValueError("Missing the required parameter `dictionary` when calling `modify_application_settings`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'dictionary' in params: - body_params = params['dictionary'] - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['application/json']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/settings', 'PUT', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiSettings', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def set_application_settings(self, settings, **kwargs): # noqa: E501 - """set_application_settings # noqa: E501 - - Set and store the application settings. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_application_settings(settings, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiSettings settings: (required) - :return: ApiSettings - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.set_application_settings_with_http_info(settings, **kwargs) # noqa: E501 - else: - (data) = self.set_application_settings_with_http_info(settings, **kwargs) # noqa: E501 - return data - - def set_application_settings_with_http_info(self, settings, **kwargs): # noqa: E501 - """set_application_settings # noqa: E501 - - Set and store the application settings. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_application_settings_with_http_info(settings, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiSettings settings: (required) - :return: ApiSettings - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['settings'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method set_application_settings" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'settings' is set - if ('settings' not in params or - params['settings'] is None): - raise ValueError("Missing the required parameter `settings` when calling `set_application_settings`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'settings' in params: - body_params = params['settings'] - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['application/json']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/settings', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiSettings', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) diff --git a/api/client/swagger_client/api/catalog_service_api.py b/api/client/swagger_client/api/catalog_service_api.py deleted file mode 100644 index 5a5590f0..00000000 --- a/api/client/swagger_client/api/catalog_service_api.py +++ /dev/null @@ -1,324 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from swagger_client.api_client import ApiClient - - -class CatalogServiceApi(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def list_all_assets(self, **kwargs): # noqa: E501 - """list_all_assets # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_all_assets(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. - :return: ApiListCatalogItemsResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.list_all_assets_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.list_all_assets_with_http_info(**kwargs) # noqa: E501 - return data - - def list_all_assets_with_http_info(self, **kwargs): # noqa: E501 - """list_all_assets # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_all_assets_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. - :return: ApiListCatalogItemsResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['page_token', 'page_size', 'sort_by', 'filter'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method list_all_assets" % key - ) - params[key] = val - del params['kwargs'] - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'page_token' in params: - query_params.append(('page_token', params['page_token'])) # noqa: E501 - if 'page_size' in params: - query_params.append(('page_size', params['page_size'])) # noqa: E501 - if 'sort_by' in params: - query_params.append(('sort_by', params['sort_by'])) # noqa: E501 - if 'filter' in params: - query_params.append(('filter', params['filter'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/catalog', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiListCatalogItemsResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_catalog_from_url(self, url, **kwargs): # noqa: E501 - """upload_catalog_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_catalog_from_url(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the catalog YAML file. (required) - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiCatalogUploadResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_catalog_from_url_with_http_info(url, **kwargs) # noqa: E501 - else: - (data) = self.upload_catalog_from_url_with_http_info(url, **kwargs) # noqa: E501 - return data - - def upload_catalog_from_url_with_http_info(self, url, **kwargs): # noqa: E501 - """upload_catalog_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_catalog_from_url_with_http_info(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the catalog YAML file. (required) - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiCatalogUploadResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['url', 'access_token'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_catalog_from_url" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'url' is set - if ('url' not in params or - params['url'] is None): - raise ValueError("Missing the required parameter `url` when calling `upload_catalog_from_url`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - if 'url' in params: - form_params.append(('url', params['url'])) # noqa: E501 - if 'access_token' in params: - form_params.append(('access_token', params['access_token'])) # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/catalog/upload_from_url', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiCatalogUploadResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_multiple_assets(self, body, **kwargs): # noqa: E501 - """upload_multiple_assets # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_multiple_assets(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiCatalogUpload body: (required) - :return: ApiCatalogUploadResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_multiple_assets_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.upload_multiple_assets_with_http_info(body, **kwargs) # noqa: E501 - return data - - def upload_multiple_assets_with_http_info(self, body, **kwargs): # noqa: E501 - """upload_multiple_assets # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_multiple_assets_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiCatalogUpload body: (required) - :return: ApiCatalogUploadResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['body'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_multiple_assets" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'body' is set - if ('body' not in params or - params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `upload_multiple_assets`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'body' in params: - body_params = params['body'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/catalog', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiCatalogUploadResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) diff --git a/api/client/swagger_client/api/component_service_api.py b/api/client/swagger_client/api/component_service_api.py deleted file mode 100644 index 94b05bb6..00000000 --- a/api/client/swagger_client/api/component_service_api.py +++ /dev/null @@ -1,1268 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from swagger_client.api_client import ApiClient - - -class ComponentServiceApi(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def approve_components_for_publishing(self, component_ids, **kwargs): # noqa: E501 - """approve_components_for_publishing # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.approve_components_for_publishing(component_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] component_ids: Array of component IDs to be approved for publishing. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.approve_components_for_publishing_with_http_info(component_ids, **kwargs) # noqa: E501 - else: - (data) = self.approve_components_for_publishing_with_http_info(component_ids, **kwargs) # noqa: E501 - return data - - def approve_components_for_publishing_with_http_info(self, component_ids, **kwargs): # noqa: E501 - """approve_components_for_publishing # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.approve_components_for_publishing_with_http_info(component_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] component_ids: Array of component IDs to be approved for publishing. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['component_ids'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method approve_components_for_publishing" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'component_ids' is set - if ('component_ids' not in params or - params['component_ids'] is None): - raise ValueError("Missing the required parameter `component_ids` when calling `approve_components_for_publishing`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'component_ids' in params: - body_params = params['component_ids'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/publish_approved', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def create_component(self, body, **kwargs): # noqa: E501 - """create_component # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_component(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiComponent body: (required) - :return: ApiComponent - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.create_component_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.create_component_with_http_info(body, **kwargs) # noqa: E501 - return data - - def create_component_with_http_info(self, body, **kwargs): # noqa: E501 - """create_component # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_component_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiComponent body: (required) - :return: ApiComponent - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['body'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method create_component" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'body' is set - if ('body' not in params or - params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_component`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'body' in params: - body_params = params['body'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiComponent', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def delete_component(self, id, **kwargs): # noqa: E501 - """delete_component # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_component(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.delete_component_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.delete_component_with_http_info(id, **kwargs) # noqa: E501 - return data - - def delete_component_with_http_info(self, id, **kwargs): # noqa: E501 - """delete_component # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_component_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method delete_component" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `delete_component`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/{id}', 'DELETE', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def download_component_files(self, id, **kwargs): # noqa: E501 - """Returns the component artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.download_component_files(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param bool include_generated_code: Include generated run script in download - :return: urllib3.response.HTTPResponse (assuming _preload_content=False) - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.download_component_files_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.download_component_files_with_http_info(id, **kwargs) # noqa: E501 - return data - - def download_component_files_with_http_info(self, id, **kwargs): # noqa: E501 - """Returns the component artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.download_component_files_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param bool include_generated_code: Include generated run script in download - :return: urllib3.response.HTTPResponse (assuming _preload_content=False) - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'include_generated_code'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method download_component_files" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `download_component_files`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - if 'include_generated_code' in params: - query_params.append(('include_generated_code', params['include_generated_code'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/gzip']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/{id}/download', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='file', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', False), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def generate_component_code(self, id, **kwargs): # noqa: E501 - """generate_component_code # noqa: E501 - - Generate sample code to use component in a pipeline # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.generate_component_code(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGenerateCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.generate_component_code_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.generate_component_code_with_http_info(id, **kwargs) # noqa: E501 - return data - - def generate_component_code_with_http_info(self, id, **kwargs): # noqa: E501 - """generate_component_code # noqa: E501 - - Generate sample code to use component in a pipeline # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.generate_component_code_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGenerateCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method generate_component_code" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `generate_component_code`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/{id}/generate_code', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiGenerateCodeResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_component(self, id, **kwargs): # noqa: E501 - """get_component # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_component(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiComponent - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_component_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_component_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_component_with_http_info(self, id, **kwargs): # noqa: E501 - """get_component # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_component_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiComponent - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_component" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_component`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/{id}', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiComponent', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_component_template(self, id, **kwargs): # noqa: E501 - """get_component_template # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_component_template(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGetTemplateResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_component_template_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_component_template_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_component_template_with_http_info(self, id, **kwargs): # noqa: E501 - """get_component_template # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_component_template_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGetTemplateResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_component_template" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_component_template`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/{id}/templates', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiGetTemplateResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def list_components(self, **kwargs): # noqa: E501 - """list_components # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_components(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. - :return: ApiListComponentsResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.list_components_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.list_components_with_http_info(**kwargs) # noqa: E501 - return data - - def list_components_with_http_info(self, **kwargs): # noqa: E501 - """list_components # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_components_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. - :return: ApiListComponentsResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['page_token', 'page_size', 'sort_by', 'filter'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method list_components" % key - ) - params[key] = val - del params['kwargs'] - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'page_token' in params: - query_params.append(('page_token', params['page_token'])) # noqa: E501 - if 'page_size' in params: - query_params.append(('page_size', params['page_size'])) # noqa: E501 - if 'sort_by' in params: - query_params.append(('sort_by', params['sort_by'])) # noqa: E501 - if 'filter' in params: - query_params.append(('filter', params['filter'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiListComponentsResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def run_component(self, id, parameters, **kwargs): # noqa: E501 - """run_component # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_component(id, parameters, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param list[ApiParameter] parameters: (required) - :param str run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to component name - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.run_component_with_http_info(id, parameters, **kwargs) # noqa: E501 - else: - (data) = self.run_component_with_http_info(id, parameters, **kwargs) # noqa: E501 - return data - - def run_component_with_http_info(self, id, parameters, **kwargs): # noqa: E501 - """run_component # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_component_with_http_info(id, parameters, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param list[ApiParameter] parameters: (required) - :param str run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to component name - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'parameters', 'run_name'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method run_component" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `run_component`") # noqa: E501 - # verify the required parameter 'parameters' is set - if ('parameters' not in params or - params['parameters'] is None): - raise ValueError("Missing the required parameter `parameters` when calling `run_component`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - if 'run_name' in params: - query_params.append(('run_name', params['run_name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'parameters' in params: - body_params = params['parameters'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/{id}/run', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiRunCodeResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def set_featured_components(self, component_ids, **kwargs): # noqa: E501 - """set_featured_components # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_featured_components(component_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] component_ids: Array of component IDs to be featured. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.set_featured_components_with_http_info(component_ids, **kwargs) # noqa: E501 - else: - (data) = self.set_featured_components_with_http_info(component_ids, **kwargs) # noqa: E501 - return data - - def set_featured_components_with_http_info(self, component_ids, **kwargs): # noqa: E501 - """set_featured_components # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_featured_components_with_http_info(component_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] component_ids: Array of component IDs to be featured. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['component_ids'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method set_featured_components" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'component_ids' is set - if ('component_ids' not in params or - params['component_ids'] is None): - raise ValueError("Missing the required parameter `component_ids` when calling `set_featured_components`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'component_ids' in params: - body_params = params['component_ids'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/featured', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_component(self, uploadfile, **kwargs): # noqa: E501 - """upload_component # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_component(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The component YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. (required) - :param str name: - :return: ApiComponent - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_component_with_http_info(uploadfile, **kwargs) # noqa: E501 - else: - (data) = self.upload_component_with_http_info(uploadfile, **kwargs) # noqa: E501 - return data - - def upload_component_with_http_info(self, uploadfile, **kwargs): # noqa: E501 - """upload_component # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_component_with_http_info(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The component YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. (required) - :param str name: - :return: ApiComponent - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['uploadfile', 'name'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_component" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'uploadfile' is set - if ('uploadfile' not in params or - params['uploadfile'] is None): - raise ValueError("Missing the required parameter `uploadfile` when calling `upload_component`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'uploadfile' in params: - local_var_files['uploadfile'] = params['uploadfile'] # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/upload', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiComponent', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_component_file(self, id, uploadfile, **kwargs): # noqa: E501 - """upload_component_file # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_component_file(id, uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: The id of the component. (required) - :param file uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) (required) - :return: ApiComponent - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_component_file_with_http_info(id, uploadfile, **kwargs) # noqa: E501 - else: - (data) = self.upload_component_file_with_http_info(id, uploadfile, **kwargs) # noqa: E501 - return data - - def upload_component_file_with_http_info(self, id, uploadfile, **kwargs): # noqa: E501 - """upload_component_file # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_component_file_with_http_info(id, uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: The id of the component. (required) - :param file uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) (required) - :return: ApiComponent - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'uploadfile'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_component_file" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `upload_component_file`") # noqa: E501 - # verify the required parameter 'uploadfile' is set - if ('uploadfile' not in params or - params['uploadfile'] is None): - raise ValueError("Missing the required parameter `uploadfile` when calling `upload_component_file`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - if 'uploadfile' in params: - local_var_files['uploadfile'] = params['uploadfile'] # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/{id}/upload', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiComponent', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_component_from_url(self, url, **kwargs): # noqa: E501 - """upload_component_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_component_from_url(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the component YAML file. (required) - :param str name: Optional, the name of the component to be created overriding the name in the YAML file. - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiComponent - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_component_from_url_with_http_info(url, **kwargs) # noqa: E501 - else: - (data) = self.upload_component_from_url_with_http_info(url, **kwargs) # noqa: E501 - return data - - def upload_component_from_url_with_http_info(self, url, **kwargs): # noqa: E501 - """upload_component_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_component_from_url_with_http_info(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the component YAML file. (required) - :param str name: Optional, the name of the component to be created overriding the name in the YAML file. - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiComponent - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['url', 'name', 'access_token'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_component_from_url" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'url' is set - if ('url' not in params or - params['url'] is None): - raise ValueError("Missing the required parameter `url` when calling `upload_component_from_url`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'url' in params: - form_params.append(('url', params['url'])) # noqa: E501 - if 'access_token' in params: - form_params.append(('access_token', params['access_token'])) # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/components/upload_from_url', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiComponent', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) diff --git a/api/client/swagger_client/api/credential_service_api.py b/api/client/swagger_client/api/credential_service_api.py deleted file mode 100644 index 8f9d60d8..00000000 --- a/api/client/swagger_client/api/credential_service_api.py +++ /dev/null @@ -1,407 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from swagger_client.api_client import ApiClient - - -class CredentialServiceApi(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def create_credential(self, body, **kwargs): # noqa: E501 - """create_credential # noqa: E501 - - Creates a credential associated with a pipeline. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_credential(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiCredential body: (required) - :return: ApiCredential - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.create_credential_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.create_credential_with_http_info(body, **kwargs) # noqa: E501 - return data - - def create_credential_with_http_info(self, body, **kwargs): # noqa: E501 - """create_credential # noqa: E501 - - Creates a credential associated with a pipeline. # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_credential_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiCredential body: (required) - :return: ApiCredential - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['body'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method create_credential" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'body' is set - if ('body' not in params or - params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_credential`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'body' in params: - body_params = params['body'] - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['application/json']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/credentials', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiCredential', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def delete_credential(self, id, **kwargs): # noqa: E501 - """delete_credential # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_credential(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.delete_credential_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.delete_credential_with_http_info(id, **kwargs) # noqa: E501 - return data - - def delete_credential_with_http_info(self, id, **kwargs): # noqa: E501 - """delete_credential # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_credential_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method delete_credential" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `delete_credential`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/credentials/{id}', 'DELETE', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_credential(self, id, **kwargs): # noqa: E501 - """get_credential # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_credential(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiCredential - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_credential_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_credential_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_credential_with_http_info(self, id, **kwargs): # noqa: E501 - """get_credential # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_credential_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiCredential - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_credential" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_credential`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/credentials/{id}', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiCredential', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def list_credentials(self, **kwargs): # noqa: E501 - """list_credentials # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_credentials(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Credential's attribute names and their respective values to be filtered for. - :return: ApiListCredentialsResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.list_credentials_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.list_credentials_with_http_info(**kwargs) # noqa: E501 - return data - - def list_credentials_with_http_info(self, **kwargs): # noqa: E501 - """list_credentials # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_credentials_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Credential's attribute names and their respective values to be filtered for. - :return: ApiListCredentialsResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['page_token', 'page_size', 'sort_by', 'filter'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method list_credentials" % key - ) - params[key] = val - del params['kwargs'] - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'page_token' in params: - query_params.append(('page_token', params['page_token'])) # noqa: E501 - if 'page_size' in params: - query_params.append(('page_size', params['page_size'])) # noqa: E501 - if 'sort_by' in params: - query_params.append(('sort_by', params['sort_by'])) # noqa: E501 - if 'filter' in params: - query_params.append(('filter', params['filter'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/credentials', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiListCredentialsResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) diff --git a/api/client/swagger_client/api/dataset_service_api.py b/api/client/swagger_client/api/dataset_service_api.py deleted file mode 100644 index b23151e1..00000000 --- a/api/client/swagger_client/api/dataset_service_api.py +++ /dev/null @@ -1,1264 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from swagger_client.api_client import ApiClient - - -class DatasetServiceApi(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def approve_datasets_for_publishing(self, dataset_ids, **kwargs): # noqa: E501 - """approve_datasets_for_publishing # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.approve_datasets_for_publishing(dataset_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] dataset_ids: Array of dataset IDs to be approved for publishing. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.approve_datasets_for_publishing_with_http_info(dataset_ids, **kwargs) # noqa: E501 - else: - (data) = self.approve_datasets_for_publishing_with_http_info(dataset_ids, **kwargs) # noqa: E501 - return data - - def approve_datasets_for_publishing_with_http_info(self, dataset_ids, **kwargs): # noqa: E501 - """approve_datasets_for_publishing # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.approve_datasets_for_publishing_with_http_info(dataset_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] dataset_ids: Array of dataset IDs to be approved for publishing. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['dataset_ids'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method approve_datasets_for_publishing" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'dataset_ids' is set - if ('dataset_ids' not in params or - params['dataset_ids'] is None): - raise ValueError("Missing the required parameter `dataset_ids` when calling `approve_datasets_for_publishing`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'dataset_ids' in params: - body_params = params['dataset_ids'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/publish_approved', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def create_dataset(self, body, **kwargs): # noqa: E501 - """create_dataset # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_dataset(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiDataset body: (required) - :return: ApiDataset - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.create_dataset_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.create_dataset_with_http_info(body, **kwargs) # noqa: E501 - return data - - def create_dataset_with_http_info(self, body, **kwargs): # noqa: E501 - """create_dataset # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_dataset_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiDataset body: (required) - :return: ApiDataset - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['body'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method create_dataset" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'body' is set - if ('body' not in params or - params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_dataset`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'body' in params: - body_params = params['body'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiDataset', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def delete_dataset(self, id, **kwargs): # noqa: E501 - """delete_dataset # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_dataset(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.delete_dataset_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.delete_dataset_with_http_info(id, **kwargs) # noqa: E501 - return data - - def delete_dataset_with_http_info(self, id, **kwargs): # noqa: E501 - """delete_dataset # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_dataset_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method delete_dataset" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `delete_dataset`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/{id}', 'DELETE', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def download_dataset_files(self, id, **kwargs): # noqa: E501 - """Returns the dataset artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.download_dataset_files(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param bool include_generated_code: Include generated run script in download - :return: urllib3.response.HTTPResponse (assuming _preload_content=False) - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.download_dataset_files_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.download_dataset_files_with_http_info(id, **kwargs) # noqa: E501 - return data - - def download_dataset_files_with_http_info(self, id, **kwargs): # noqa: E501 - """Returns the dataset artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.download_dataset_files_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param bool include_generated_code: Include generated run script in download - :return: urllib3.response.HTTPResponse (assuming _preload_content=False) - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'include_generated_code'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method download_dataset_files" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `download_dataset_files`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - if 'include_generated_code' in params: - query_params.append(('include_generated_code', params['include_generated_code'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/gzip']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/{id}/download', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='file', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', False), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def generate_dataset_code(self, id, **kwargs): # noqa: E501 - """generate_dataset_code # noqa: E501 - - Generate sample code to use dataset in a pipeline # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.generate_dataset_code(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGenerateCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.generate_dataset_code_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.generate_dataset_code_with_http_info(id, **kwargs) # noqa: E501 - return data - - def generate_dataset_code_with_http_info(self, id, **kwargs): # noqa: E501 - """generate_dataset_code # noqa: E501 - - Generate sample code to use dataset in a pipeline # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.generate_dataset_code_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGenerateCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method generate_dataset_code" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `generate_dataset_code`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/{id}/generate_code', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiGenerateCodeResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_dataset(self, id, **kwargs): # noqa: E501 - """get_dataset # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_dataset(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiDataset - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_dataset_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_dataset_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_dataset_with_http_info(self, id, **kwargs): # noqa: E501 - """get_dataset # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_dataset_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiDataset - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_dataset" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_dataset`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/{id}', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiDataset', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_dataset_template(self, id, **kwargs): # noqa: E501 - """get_dataset_template # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_dataset_template(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGetTemplateResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_dataset_template_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_dataset_template_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_dataset_template_with_http_info(self, id, **kwargs): # noqa: E501 - """get_dataset_template # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_dataset_template_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGetTemplateResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_dataset_template" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_dataset_template`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/{id}/templates', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiGetTemplateResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def list_datasets(self, **kwargs): # noqa: E501 - """list_datasets # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_datasets(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of 'field_name', 'field_name asc' or 'field_name desc'. Ascending by default. - :param str filter: A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. - :return: ApiListDatasetsResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.list_datasets_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.list_datasets_with_http_info(**kwargs) # noqa: E501 - return data - - def list_datasets_with_http_info(self, **kwargs): # noqa: E501 - """list_datasets # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_datasets_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of 'field_name', 'field_name asc' or 'field_name desc'. Ascending by default. - :param str filter: A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. - :return: ApiListDatasetsResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['page_token', 'page_size', 'sort_by', 'filter'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method list_datasets" % key - ) - params[key] = val - del params['kwargs'] - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'page_token' in params: - query_params.append(('page_token', params['page_token'])) # noqa: E501 - if 'page_size' in params: - query_params.append(('page_size', params['page_size'])) # noqa: E501 - if 'sort_by' in params: - query_params.append(('sort_by', params['sort_by'])) # noqa: E501 - if 'filter' in params: - query_params.append(('filter', params['filter'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiListDatasetsResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def run_dataset(self, id, **kwargs): # noqa: E501 - """run_dataset # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_dataset(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param list[ApiParameter] parameters: - :param str run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to component name - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.run_dataset_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.run_dataset_with_http_info(id, **kwargs) # noqa: E501 - return data - - def run_dataset_with_http_info(self, id, **kwargs): # noqa: E501 - """run_dataset # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_dataset_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param list[ApiParameter] parameters: - :param str run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to component name - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'parameters', 'run_name'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method run_dataset" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `run_dataset`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - if 'run_name' in params: - query_params.append(('run_name', params['run_name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'parameters' in params: - body_params = params['parameters'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/{id}/run', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiRunCodeResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def set_featured_datasets(self, dataset_ids, **kwargs): # noqa: E501 - """set_featured_datasets # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_featured_datasets(dataset_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] dataset_ids: Array of dataset IDs to be featured. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.set_featured_datasets_with_http_info(dataset_ids, **kwargs) # noqa: E501 - else: - (data) = self.set_featured_datasets_with_http_info(dataset_ids, **kwargs) # noqa: E501 - return data - - def set_featured_datasets_with_http_info(self, dataset_ids, **kwargs): # noqa: E501 - """set_featured_datasets # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_featured_datasets_with_http_info(dataset_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] dataset_ids: Array of dataset IDs to be featured. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['dataset_ids'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method set_featured_datasets" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'dataset_ids' is set - if ('dataset_ids' not in params or - params['dataset_ids'] is None): - raise ValueError("Missing the required parameter `dataset_ids` when calling `set_featured_datasets`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'dataset_ids' in params: - body_params = params['dataset_ids'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/featured', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_dataset(self, uploadfile, **kwargs): # noqa: E501 - """upload_dataset # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_dataset(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The dataset YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. (required) - :param str name: - :return: ApiDataset - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_dataset_with_http_info(uploadfile, **kwargs) # noqa: E501 - else: - (data) = self.upload_dataset_with_http_info(uploadfile, **kwargs) # noqa: E501 - return data - - def upload_dataset_with_http_info(self, uploadfile, **kwargs): # noqa: E501 - """upload_dataset # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_dataset_with_http_info(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The dataset YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. (required) - :param str name: - :return: ApiDataset - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['uploadfile', 'name'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_dataset" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'uploadfile' is set - if ('uploadfile' not in params or - params['uploadfile'] is None): - raise ValueError("Missing the required parameter `uploadfile` when calling `upload_dataset`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'uploadfile' in params: - local_var_files['uploadfile'] = params['uploadfile'] # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/upload', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiDataset', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_dataset_file(self, id, uploadfile, **kwargs): # noqa: E501 - """upload_dataset_file # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_dataset_file(id, uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: The id of the dataset. (required) - :param file uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) (required) - :return: ApiDataset - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_dataset_file_with_http_info(id, uploadfile, **kwargs) # noqa: E501 - else: - (data) = self.upload_dataset_file_with_http_info(id, uploadfile, **kwargs) # noqa: E501 - return data - - def upload_dataset_file_with_http_info(self, id, uploadfile, **kwargs): # noqa: E501 - """upload_dataset_file # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_dataset_file_with_http_info(id, uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: The id of the dataset. (required) - :param file uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) (required) - :return: ApiDataset - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'uploadfile'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_dataset_file" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `upload_dataset_file`") # noqa: E501 - # verify the required parameter 'uploadfile' is set - if ('uploadfile' not in params or - params['uploadfile'] is None): - raise ValueError("Missing the required parameter `uploadfile` when calling `upload_dataset_file`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - if 'uploadfile' in params: - local_var_files['uploadfile'] = params['uploadfile'] # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/{id}/upload', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiDataset', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_dataset_from_url(self, url, **kwargs): # noqa: E501 - """upload_dataset_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_dataset_from_url(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the dataset YAML file. (required) - :param str name: Optional, the name of the dataset to be created overriding the name in the YAML file. - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiDataset - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_dataset_from_url_with_http_info(url, **kwargs) # noqa: E501 - else: - (data) = self.upload_dataset_from_url_with_http_info(url, **kwargs) # noqa: E501 - return data - - def upload_dataset_from_url_with_http_info(self, url, **kwargs): # noqa: E501 - """upload_dataset_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_dataset_from_url_with_http_info(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the dataset YAML file. (required) - :param str name: Optional, the name of the dataset to be created overriding the name in the YAML file. - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiDataset - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['url', 'name', 'access_token'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_dataset_from_url" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'url' is set - if ('url' not in params or - params['url'] is None): - raise ValueError("Missing the required parameter `url` when calling `upload_dataset_from_url`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'url' in params: - form_params.append(('url', params['url'])) # noqa: E501 - if 'access_token' in params: - form_params.append(('access_token', params['access_token'])) # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/datasets/upload_from_url', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiDataset', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) diff --git a/api/client/swagger_client/api/health_check_api.py b/api/client/swagger_client/api/health_check_api.py deleted file mode 100644 index a717819e..00000000 --- a/api/client/swagger_client/api/health_check_api.py +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from swagger_client.api_client import ApiClient - - -class HealthCheckApi(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def health_check(self, **kwargs): # noqa: E501 - """Checks if the server is running # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.health_check(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param bool check_database: Test connection to MySQL database - :param bool check_object_store: Test connection to Minio object store - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.health_check_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.health_check_with_http_info(**kwargs) # noqa: E501 - return data - - def health_check_with_http_info(self, **kwargs): # noqa: E501 - """Checks if the server is running # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.health_check_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param bool check_database: Test connection to MySQL database - :param bool check_object_store: Test connection to Minio object store - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['check_database', 'check_object_store'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method health_check" % key - ) - params[key] = val - del params['kwargs'] - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'check_database' in params: - query_params.append(('check_database', params['check_database'])) # noqa: E501 - if 'check_object_store' in params: - query_params.append(('check_object_store', params['check_object_store'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/health_check', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) diff --git a/api/client/swagger_client/api/inference_service_api.py b/api/client/swagger_client/api/inference_service_api.py deleted file mode 100644 index 16821c5a..00000000 --- a/api/client/swagger_client/api/inference_service_api.py +++ /dev/null @@ -1,429 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from swagger_client.api_client import ApiClient - - -class InferenceServiceApi(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def create_service(self, body, **kwargs): # noqa: E501 - """create_service # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_service(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiInferenceservice body: (required) - :param str namespace: - :return: ApiInferenceservice - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.create_service_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.create_service_with_http_info(body, **kwargs) # noqa: E501 - return data - - def create_service_with_http_info(self, body, **kwargs): # noqa: E501 - """create_service # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_service_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiInferenceservice body: (required) - :param str namespace: - :return: ApiInferenceservice - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['body', 'namespace'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method create_service" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'body' is set - if ('body' not in params or - params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_service`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'namespace' in params: - query_params.append(('namespace', params['namespace'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'body' in params: - body_params = params['body'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/inferenceservices', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiInferenceservice', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_inferenceservices(self, id, **kwargs): # noqa: E501 - """get_inferenceservices # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_inferenceservices(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param str namespace: - :return: ApiInferenceservice - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_inferenceservices_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_inferenceservices_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_inferenceservices_with_http_info(self, id, **kwargs): # noqa: E501 - """get_inferenceservices # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_inferenceservices_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param str namespace: - :return: ApiInferenceservice - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'namespace'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_inferenceservices" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_inferenceservices`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - if 'namespace' in params: - query_params.append(('namespace', params['namespace'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/inferenceservices/{id}', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiInferenceservice', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def list_inferenceservices(self, **kwargs): # noqa: E501 - """list_inferenceservices # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_inferenceservices(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the InferenceService's attribute names and their respective values to be filtered for. - :param str namespace: - :return: ApiListInferenceservicesResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.list_inferenceservices_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.list_inferenceservices_with_http_info(**kwargs) # noqa: E501 - return data - - def list_inferenceservices_with_http_info(self, **kwargs): # noqa: E501 - """list_inferenceservices # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_inferenceservices_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the InferenceService's attribute names and their respective values to be filtered for. - :param str namespace: - :return: ApiListInferenceservicesResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['page_token', 'page_size', 'sort_by', 'filter', 'namespace'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method list_inferenceservices" % key - ) - params[key] = val - del params['kwargs'] - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'page_token' in params: - query_params.append(('page_token', params['page_token'])) # noqa: E501 - if 'page_size' in params: - query_params.append(('page_size', params['page_size'])) # noqa: E501 - if 'sort_by' in params: - query_params.append(('sort_by', params['sort_by'])) # noqa: E501 - if 'filter' in params: - query_params.append(('filter', params['filter'])) # noqa: E501 - if 'namespace' in params: - query_params.append(('namespace', params['namespace'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/inferenceservices', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiListInferenceservicesResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_service(self, uploadfile, **kwargs): # noqa: E501 - """upload_service # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_service(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The inference service metadata to upload. Maximum size of 32MB is supported. (required) - :param str name: - :param str namespace: - :return: ApiInferenceservice - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_service_with_http_info(uploadfile, **kwargs) # noqa: E501 - else: - (data) = self.upload_service_with_http_info(uploadfile, **kwargs) # noqa: E501 - return data - - def upload_service_with_http_info(self, uploadfile, **kwargs): # noqa: E501 - """upload_service # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_service_with_http_info(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The inference service metadata to upload. Maximum size of 32MB is supported. (required) - :param str name: - :param str namespace: - :return: ApiInferenceservice - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['uploadfile', 'name', 'namespace'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_service" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'uploadfile' is set - if ('uploadfile' not in params or - params['uploadfile'] is None): - raise ValueError("Missing the required parameter `uploadfile` when calling `upload_service`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - if 'namespace' in params: - query_params.append(('namespace', params['namespace'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'uploadfile' in params: - local_var_files['uploadfile'] = params['uploadfile'] # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/inferenceservices/upload', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiInferenceservice', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) diff --git a/api/client/swagger_client/api/model_service_api.py b/api/client/swagger_client/api/model_service_api.py deleted file mode 100644 index bc6d95c0..00000000 --- a/api/client/swagger_client/api/model_service_api.py +++ /dev/null @@ -1,1278 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from swagger_client.api_client import ApiClient - - -class ModelServiceApi(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def approve_models_for_publishing(self, model_ids, **kwargs): # noqa: E501 - """approve_models_for_publishing # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.approve_models_for_publishing(model_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] model_ids: Array of model IDs to be approved for publishing. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.approve_models_for_publishing_with_http_info(model_ids, **kwargs) # noqa: E501 - else: - (data) = self.approve_models_for_publishing_with_http_info(model_ids, **kwargs) # noqa: E501 - return data - - def approve_models_for_publishing_with_http_info(self, model_ids, **kwargs): # noqa: E501 - """approve_models_for_publishing # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.approve_models_for_publishing_with_http_info(model_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] model_ids: Array of model IDs to be approved for publishing. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['model_ids'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method approve_models_for_publishing" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'model_ids' is set - if ('model_ids' not in params or - params['model_ids'] is None): - raise ValueError("Missing the required parameter `model_ids` when calling `approve_models_for_publishing`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'model_ids' in params: - body_params = params['model_ids'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/publish_approved', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def create_model(self, body, **kwargs): # noqa: E501 - """create_model # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_model(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiModel body: (required) - :return: ApiModel - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.create_model_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.create_model_with_http_info(body, **kwargs) # noqa: E501 - return data - - def create_model_with_http_info(self, body, **kwargs): # noqa: E501 - """create_model # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_model_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiModel body: (required) - :return: ApiModel - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['body'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method create_model" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'body' is set - if ('body' not in params or - params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_model`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'body' in params: - body_params = params['body'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiModel', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def delete_model(self, id, **kwargs): # noqa: E501 - """delete_model # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_model(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.delete_model_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.delete_model_with_http_info(id, **kwargs) # noqa: E501 - return data - - def delete_model_with_http_info(self, id, **kwargs): # noqa: E501 - """delete_model # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_model_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method delete_model" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `delete_model`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/{id}', 'DELETE', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def download_model_files(self, id, **kwargs): # noqa: E501 - """Returns the model artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.download_model_files(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param bool include_generated_code: Include generated run scripts in download - :return: urllib3.response.HTTPResponse (assuming _preload_content=False) - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.download_model_files_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.download_model_files_with_http_info(id, **kwargs) # noqa: E501 - return data - - def download_model_files_with_http_info(self, id, **kwargs): # noqa: E501 - """Returns the model artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.download_model_files_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param bool include_generated_code: Include generated run scripts in download - :return: urllib3.response.HTTPResponse (assuming _preload_content=False) - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'include_generated_code'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method download_model_files" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `download_model_files`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - if 'include_generated_code' in params: - query_params.append(('include_generated_code', params['include_generated_code'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/gzip']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/{id}/download', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='file', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', False), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def generate_model_code(self, id, **kwargs): # noqa: E501 - """generate_model_code # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.generate_model_code(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGenerateModelCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.generate_model_code_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.generate_model_code_with_http_info(id, **kwargs) # noqa: E501 - return data - - def generate_model_code_with_http_info(self, id, **kwargs): # noqa: E501 - """generate_model_code # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.generate_model_code_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGenerateModelCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method generate_model_code" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `generate_model_code`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/{id}/generate_code', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiGenerateModelCodeResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_model(self, id, **kwargs): # noqa: E501 - """get_model # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_model(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiModel - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_model_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_model_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_model_with_http_info(self, id, **kwargs): # noqa: E501 - """get_model # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_model_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiModel - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_model" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_model`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/{id}', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiModel', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_model_template(self, id, **kwargs): # noqa: E501 - """get_model_template # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_model_template(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGetTemplateResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_model_template_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_model_template_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_model_template_with_http_info(self, id, **kwargs): # noqa: E501 - """get_model_template # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_model_template_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGetTemplateResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_model_template" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_model_template`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/{id}/templates', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiGetTemplateResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def list_models(self, **kwargs): # noqa: E501 - """list_models # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_models(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Model's attribute names and their respective values to be filtered for. - :return: ApiListModelsResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.list_models_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.list_models_with_http_info(**kwargs) # noqa: E501 - return data - - def list_models_with_http_info(self, **kwargs): # noqa: E501 - """list_models # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_models_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Model's attribute names and their respective values to be filtered for. - :return: ApiListModelsResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['page_token', 'page_size', 'sort_by', 'filter'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method list_models" % key - ) - params[key] = val - del params['kwargs'] - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'page_token' in params: - query_params.append(('page_token', params['page_token'])) # noqa: E501 - if 'page_size' in params: - query_params.append(('page_size', params['page_size'])) # noqa: E501 - if 'sort_by' in params: - query_params.append(('sort_by', params['sort_by'])) # noqa: E501 - if 'filter' in params: - query_params.append(('filter', params['filter'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiListModelsResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def run_model(self, id, pipeline_stage, execution_platform, **kwargs): # noqa: E501 - """run_model # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_model(id, pipeline_stage, execution_platform, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param str pipeline_stage: pipeline stage, either 'train' or 'serve' (required) - :param str execution_platform: execution platform, i.e. 'kubernetes', 'knative' (required) - :param str run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to model identifier - :param Dictionary parameters: optional run parameters, must include 'github_url' and 'github_token' if credentials are required - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.run_model_with_http_info(id, pipeline_stage, execution_platform, **kwargs) # noqa: E501 - else: - (data) = self.run_model_with_http_info(id, pipeline_stage, execution_platform, **kwargs) # noqa: E501 - return data - - def run_model_with_http_info(self, id, pipeline_stage, execution_platform, **kwargs): # noqa: E501 - """run_model # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_model_with_http_info(id, pipeline_stage, execution_platform, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param str pipeline_stage: pipeline stage, either 'train' or 'serve' (required) - :param str execution_platform: execution platform, i.e. 'kubernetes', 'knative' (required) - :param str run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to model identifier - :param Dictionary parameters: optional run parameters, must include 'github_url' and 'github_token' if credentials are required - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'pipeline_stage', 'execution_platform', 'run_name', 'parameters'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method run_model" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `run_model`") # noqa: E501 - # verify the required parameter 'pipeline_stage' is set - if ('pipeline_stage' not in params or - params['pipeline_stage'] is None): - raise ValueError("Missing the required parameter `pipeline_stage` when calling `run_model`") # noqa: E501 - # verify the required parameter 'execution_platform' is set - if ('execution_platform' not in params or - params['execution_platform'] is None): - raise ValueError("Missing the required parameter `execution_platform` when calling `run_model`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - if 'pipeline_stage' in params: - query_params.append(('pipeline_stage', params['pipeline_stage'])) # noqa: E501 - if 'execution_platform' in params: - query_params.append(('execution_platform', params['execution_platform'])) # noqa: E501 - if 'run_name' in params: - query_params.append(('run_name', params['run_name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'parameters' in params: - body_params = params['parameters'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/{id}/run', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiRunCodeResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def set_featured_models(self, model_ids, **kwargs): # noqa: E501 - """set_featured_models # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_featured_models(model_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] model_ids: Array of model IDs to be featured. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.set_featured_models_with_http_info(model_ids, **kwargs) # noqa: E501 - else: - (data) = self.set_featured_models_with_http_info(model_ids, **kwargs) # noqa: E501 - return data - - def set_featured_models_with_http_info(self, model_ids, **kwargs): # noqa: E501 - """set_featured_models # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_featured_models_with_http_info(model_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] model_ids: Array of model IDs to be featured. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['model_ids'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method set_featured_models" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'model_ids' is set - if ('model_ids' not in params or - params['model_ids'] is None): - raise ValueError("Missing the required parameter `model_ids` when calling `set_featured_models`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'model_ids' in params: - body_params = params['model_ids'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/featured', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_model(self, uploadfile, **kwargs): # noqa: E501 - """upload_model # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_model(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The model YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. (required) - :param str name: - :return: ApiModel - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_model_with_http_info(uploadfile, **kwargs) # noqa: E501 - else: - (data) = self.upload_model_with_http_info(uploadfile, **kwargs) # noqa: E501 - return data - - def upload_model_with_http_info(self, uploadfile, **kwargs): # noqa: E501 - """upload_model # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_model_with_http_info(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The model YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. (required) - :param str name: - :return: ApiModel - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['uploadfile', 'name'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_model" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'uploadfile' is set - if ('uploadfile' not in params or - params['uploadfile'] is None): - raise ValueError("Missing the required parameter `uploadfile` when calling `upload_model`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'uploadfile' in params: - local_var_files['uploadfile'] = params['uploadfile'] # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/upload', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiModel', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_model_file(self, id, uploadfile, **kwargs): # noqa: E501 - """upload_model_file # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_model_file(id, uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: The model identifier. (required) - :param file uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) (required) - :return: ApiModel - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_model_file_with_http_info(id, uploadfile, **kwargs) # noqa: E501 - else: - (data) = self.upload_model_file_with_http_info(id, uploadfile, **kwargs) # noqa: E501 - return data - - def upload_model_file_with_http_info(self, id, uploadfile, **kwargs): # noqa: E501 - """upload_model_file # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_model_file_with_http_info(id, uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: The model identifier. (required) - :param file uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) (required) - :return: ApiModel - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'uploadfile'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_model_file" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `upload_model_file`") # noqa: E501 - # verify the required parameter 'uploadfile' is set - if ('uploadfile' not in params or - params['uploadfile'] is None): - raise ValueError("Missing the required parameter `uploadfile` when calling `upload_model_file`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - if 'uploadfile' in params: - local_var_files['uploadfile'] = params['uploadfile'] # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/{id}/upload', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiModel', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_model_from_url(self, url, **kwargs): # noqa: E501 - """upload_model_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_model_from_url(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the model YAML file. (required) - :param str name: Optional, the name of the model to be created overriding the name in the YAML file. - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiModel - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_model_from_url_with_http_info(url, **kwargs) # noqa: E501 - else: - (data) = self.upload_model_from_url_with_http_info(url, **kwargs) # noqa: E501 - return data - - def upload_model_from_url_with_http_info(self, url, **kwargs): # noqa: E501 - """upload_model_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_model_from_url_with_http_info(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the model YAML file. (required) - :param str name: Optional, the name of the model to be created overriding the name in the YAML file. - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiModel - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['url', 'name', 'access_token'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_model_from_url" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'url' is set - if ('url' not in params or - params['url'] is None): - raise ValueError("Missing the required parameter `url` when calling `upload_model_from_url`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'url' in params: - form_params.append(('url', params['url'])) # noqa: E501 - if 'access_token' in params: - form_params.append(('access_token', params['access_token'])) # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/models/upload_from_url', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiModel', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) diff --git a/api/client/swagger_client/api/notebook_service_api.py b/api/client/swagger_client/api/notebook_service_api.py deleted file mode 100644 index 05722971..00000000 --- a/api/client/swagger_client/api/notebook_service_api.py +++ /dev/null @@ -1,1268 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from swagger_client.api_client import ApiClient - - -class NotebookServiceApi(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def approve_notebooks_for_publishing(self, notebook_ids, **kwargs): # noqa: E501 - """approve_notebooks_for_publishing # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.approve_notebooks_for_publishing(notebook_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] notebook_ids: Array of notebook IDs to be approved for publishing. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.approve_notebooks_for_publishing_with_http_info(notebook_ids, **kwargs) # noqa: E501 - else: - (data) = self.approve_notebooks_for_publishing_with_http_info(notebook_ids, **kwargs) # noqa: E501 - return data - - def approve_notebooks_for_publishing_with_http_info(self, notebook_ids, **kwargs): # noqa: E501 - """approve_notebooks_for_publishing # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.approve_notebooks_for_publishing_with_http_info(notebook_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] notebook_ids: Array of notebook IDs to be approved for publishing. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['notebook_ids'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method approve_notebooks_for_publishing" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'notebook_ids' is set - if ('notebook_ids' not in params or - params['notebook_ids'] is None): - raise ValueError("Missing the required parameter `notebook_ids` when calling `approve_notebooks_for_publishing`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'notebook_ids' in params: - body_params = params['notebook_ids'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/publish_approved', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def create_notebook(self, body, **kwargs): # noqa: E501 - """create_notebook # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_notebook(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiNotebook body: (required) - :return: ApiNotebook - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.create_notebook_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.create_notebook_with_http_info(body, **kwargs) # noqa: E501 - return data - - def create_notebook_with_http_info(self, body, **kwargs): # noqa: E501 - """create_notebook # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_notebook_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiNotebook body: (required) - :return: ApiNotebook - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['body'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method create_notebook" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'body' is set - if ('body' not in params or - params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_notebook`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'body' in params: - body_params = params['body'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiNotebook', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def delete_notebook(self, id, **kwargs): # noqa: E501 - """delete_notebook # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_notebook(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.delete_notebook_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.delete_notebook_with_http_info(id, **kwargs) # noqa: E501 - return data - - def delete_notebook_with_http_info(self, id, **kwargs): # noqa: E501 - """delete_notebook # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_notebook_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method delete_notebook" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `delete_notebook`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/{id}', 'DELETE', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def download_notebook_files(self, id, **kwargs): # noqa: E501 - """Returns the notebook artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.download_notebook_files(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param bool include_generated_code: Include generated run script in download - :return: file - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.download_notebook_files_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.download_notebook_files_with_http_info(id, **kwargs) # noqa: E501 - return data - - def download_notebook_files_with_http_info(self, id, **kwargs): # noqa: E501 - """Returns the notebook artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.download_notebook_files_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param bool include_generated_code: Include generated run script in download - :return: file - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'include_generated_code'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method download_notebook_files" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `download_notebook_files`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - if 'include_generated_code' in params: - query_params.append(('include_generated_code', params['include_generated_code'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/gzip']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/{id}/download', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='file', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', False), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def generate_notebook_code(self, id, **kwargs): # noqa: E501 - """generate_notebook_code # noqa: E501 - - Generate sample code to use notebook in a pipeline # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.generate_notebook_code(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGenerateCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.generate_notebook_code_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.generate_notebook_code_with_http_info(id, **kwargs) # noqa: E501 - return data - - def generate_notebook_code_with_http_info(self, id, **kwargs): # noqa: E501 - """generate_notebook_code # noqa: E501 - - Generate sample code to use notebook in a pipeline # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.generate_notebook_code_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGenerateCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method generate_notebook_code" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `generate_notebook_code`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/{id}/generate_code', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiGenerateCodeResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_notebook(self, id, **kwargs): # noqa: E501 - """get_notebook # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_notebook(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiNotebook - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_notebook_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_notebook_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_notebook_with_http_info(self, id, **kwargs): # noqa: E501 - """get_notebook # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_notebook_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiNotebook - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_notebook" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_notebook`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/{id}', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiNotebook', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_notebook_template(self, id, **kwargs): # noqa: E501 - """get_notebook_template # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_notebook_template(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGetTemplateResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_notebook_template_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_notebook_template_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_notebook_template_with_http_info(self, id, **kwargs): # noqa: E501 - """get_notebook_template # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_notebook_template_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGetTemplateResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_notebook_template" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_notebook_template`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/{id}/templates', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiGetTemplateResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def list_notebooks(self, **kwargs): # noqa: E501 - """list_notebooks # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_notebooks(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Notebook's attribute names and their respective values to be filtered for. - :return: ApiListNotebooksResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.list_notebooks_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.list_notebooks_with_http_info(**kwargs) # noqa: E501 - return data - - def list_notebooks_with_http_info(self, **kwargs): # noqa: E501 - """list_notebooks # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_notebooks_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Notebook's attribute names and their respective values to be filtered for. - :return: ApiListNotebooksResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['page_token', 'page_size', 'sort_by', 'filter'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method list_notebooks" % key - ) - params[key] = val - del params['kwargs'] - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'page_token' in params: - query_params.append(('page_token', params['page_token'])) # noqa: E501 - if 'page_size' in params: - query_params.append(('page_size', params['page_size'])) # noqa: E501 - if 'sort_by' in params: - query_params.append(('sort_by', params['sort_by'])) # noqa: E501 - if 'filter' in params: - query_params.append(('filter', params['filter'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiListNotebooksResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def run_notebook(self, id, **kwargs): # noqa: E501 - """run_notebook # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_notebook(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param str run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to notebook name - :param dict parameters: optional run parameters, may be required based on pipeline definition - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.run_notebook_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.run_notebook_with_http_info(id, **kwargs) # noqa: E501 - return data - - def run_notebook_with_http_info(self, id, **kwargs): # noqa: E501 - """run_notebook # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_notebook_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param str run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to notebook name - :param dict parameters: optional run parameters, may be required based on pipeline definition - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'run_name', 'parameters'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method run_notebook" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `run_notebook`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - if 'run_name' in params: - query_params.append(('run_name', params['run_name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'parameters' in params: - body_params = params['parameters'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/{id}/run', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiRunCodeResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def set_featured_notebooks(self, notebook_ids, **kwargs): # noqa: E501 - """set_featured_notebooks # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_featured_notebooks(notebook_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] notebook_ids: Array of notebook IDs to be featured. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.set_featured_notebooks_with_http_info(notebook_ids, **kwargs) # noqa: E501 - else: - (data) = self.set_featured_notebooks_with_http_info(notebook_ids, **kwargs) # noqa: E501 - return data - - def set_featured_notebooks_with_http_info(self, notebook_ids, **kwargs): # noqa: E501 - """set_featured_notebooks # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_featured_notebooks_with_http_info(notebook_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] notebook_ids: Array of notebook IDs to be featured. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['notebook_ids'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method set_featured_notebooks" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'notebook_ids' is set - if ('notebook_ids' not in params or - params['notebook_ids'] is None): - raise ValueError("Missing the required parameter `notebook_ids` when calling `set_featured_notebooks`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'notebook_ids' in params: - body_params = params['notebook_ids'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/featured', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_notebook(self, uploadfile, **kwargs): # noqa: E501 - """upload_notebook # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_notebook(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The notebook metadata YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. (required) - :param str name: - :param str enterprise_github_token: Optional GitHub API token providing read-access to notebooks stored on Enterprise GitHub accounts. - :return: ApiNotebook - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_notebook_with_http_info(uploadfile, **kwargs) # noqa: E501 - else: - (data) = self.upload_notebook_with_http_info(uploadfile, **kwargs) # noqa: E501 - return data - - def upload_notebook_with_http_info(self, uploadfile, **kwargs): # noqa: E501 - """upload_notebook # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_notebook_with_http_info(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The notebook metadata YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. (required) - :param str name: - :param str enterprise_github_token: Optional GitHub API token providing read-access to notebooks stored on Enterprise GitHub accounts. - :return: ApiNotebook - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['uploadfile', 'name', 'enterprise_github_token'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_notebook" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'uploadfile' is set - if ('uploadfile' not in params or - params['uploadfile'] is None): - raise ValueError("Missing the required parameter `uploadfile` when calling `upload_notebook`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'uploadfile' in params: - local_var_files['uploadfile'] = params['uploadfile'] # noqa: E501 - if 'enterprise_github_token' in params: - form_params.append(('enterprise_github_token', params['enterprise_github_token'])) # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/upload', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiNotebook', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_notebook_file(self, id, uploadfile, **kwargs): # noqa: E501 - """upload_notebook_file # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_notebook_file(id, uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: The id of the notebook. (required) - :param file uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) (required) - :return: ApiNotebook - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_notebook_file_with_http_info(id, uploadfile, **kwargs) # noqa: E501 - else: - (data) = self.upload_notebook_file_with_http_info(id, uploadfile, **kwargs) # noqa: E501 - return data - - def upload_notebook_file_with_http_info(self, id, uploadfile, **kwargs): # noqa: E501 - """upload_notebook_file # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_notebook_file_with_http_info(id, uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: The id of the notebook. (required) - :param file uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) (required) - :return: ApiNotebook - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'uploadfile'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_notebook_file" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `upload_notebook_file`") # noqa: E501 - # verify the required parameter 'uploadfile' is set - if ('uploadfile' not in params or - params['uploadfile'] is None): - raise ValueError("Missing the required parameter `uploadfile` when calling `upload_notebook_file`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - if 'uploadfile' in params: - local_var_files['uploadfile'] = params['uploadfile'] # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/{id}/upload', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiNotebook', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_notebook_from_url(self, url, **kwargs): # noqa: E501 - """upload_notebook_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_notebook_from_url(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the notebook YAML file. (required) - :param str name: Optional, the name of the notebook to be created overriding the name in the YAML file. - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiNotebook - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_notebook_from_url_with_http_info(url, **kwargs) # noqa: E501 - else: - (data) = self.upload_notebook_from_url_with_http_info(url, **kwargs) # noqa: E501 - return data - - def upload_notebook_from_url_with_http_info(self, url, **kwargs): # noqa: E501 - """upload_notebook_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_notebook_from_url_with_http_info(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the notebook YAML file. (required) - :param str name: Optional, the name of the notebook to be created overriding the name in the YAML file. - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiNotebook - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['url', 'name', 'access_token'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_notebook_from_url" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'url' is set - if ('url' not in params or - params['url'] is None): - raise ValueError("Missing the required parameter `url` when calling `upload_notebook_from_url`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'url' in params: - form_params.append(('url', params['url'])) # noqa: E501 - if 'access_token' in params: - form_params.append(('access_token', params['access_token'])) # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/notebooks/upload_from_url', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiNotebook', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) diff --git a/api/client/swagger_client/api/pipeline_service_api.py b/api/client/swagger_client/api/pipeline_service_api.py deleted file mode 100644 index 06fe670f..00000000 --- a/api/client/swagger_client/api/pipeline_service_api.py +++ /dev/null @@ -1,1175 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import re # noqa: F401 - -# python 2 and python 3 compatibility library -import six - -from swagger_client.api_client import ApiClient - - -class PipelineServiceApi(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - Ref: https://github.com/swagger-api/swagger-codegen - """ - - def __init__(self, api_client=None): - if api_client is None: - api_client = ApiClient() - self.api_client = api_client - - def approve_pipelines_for_publishing(self, pipeline_ids, **kwargs): # noqa: E501 - """approve_pipelines_for_publishing # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.approve_pipelines_for_publishing(pipeline_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] pipeline_ids: Array of pipeline IDs to be approved for publishing. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.approve_pipelines_for_publishing_with_http_info(pipeline_ids, **kwargs) # noqa: E501 - else: - (data) = self.approve_pipelines_for_publishing_with_http_info(pipeline_ids, **kwargs) # noqa: E501 - return data - - def approve_pipelines_for_publishing_with_http_info(self, pipeline_ids, **kwargs): # noqa: E501 - """approve_pipelines_for_publishing # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.approve_pipelines_for_publishing_with_http_info(pipeline_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] pipeline_ids: Array of pipeline IDs to be approved for publishing. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['pipeline_ids'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method approve_pipelines_for_publishing" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'pipeline_ids' is set - if ('pipeline_ids' not in params or - params['pipeline_ids'] is None): - raise ValueError("Missing the required parameter `pipeline_ids` when calling `approve_pipelines_for_publishing`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'pipeline_ids' in params: - body_params = params['pipeline_ids'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines/publish_approved', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def create_pipeline(self, body, **kwargs): # noqa: E501 - """create_pipeline # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_pipeline(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiPipeline body: (required) - :return: ApiPipeline - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.create_pipeline_with_http_info(body, **kwargs) # noqa: E501 - else: - (data) = self.create_pipeline_with_http_info(body, **kwargs) # noqa: E501 - return data - - def create_pipeline_with_http_info(self, body, **kwargs): # noqa: E501 - """create_pipeline # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.create_pipeline_with_http_info(body, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiPipeline body: (required) - :return: ApiPipeline - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['body'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method create_pipeline" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'body' is set - if ('body' not in params or - params['body'] is None): - raise ValueError("Missing the required parameter `body` when calling `create_pipeline`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'body' in params: - body_params = params['body'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiPipeline', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def delete_pipeline(self, id, **kwargs): # noqa: E501 - """delete_pipeline # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_pipeline(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.delete_pipeline_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.delete_pipeline_with_http_info(id, **kwargs) # noqa: E501 - return data - - def delete_pipeline_with_http_info(self, id, **kwargs): # noqa: E501 - """delete_pipeline # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.delete_pipeline_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method delete_pipeline" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `delete_pipeline`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines/{id}', 'DELETE', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def download_pipeline_files(self, id, **kwargs): # noqa: E501 - """Returns the pipeline YAML compressed into a .tgz (.tar.gz) file. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.download_pipeline_files(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: urllib3.response.HTTPResponse (assuming _preload_content=False) - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.download_pipeline_files_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.download_pipeline_files_with_http_info(id, **kwargs) # noqa: E501 - return data - - def download_pipeline_files_with_http_info(self, id, **kwargs): # noqa: E501 - """Returns the pipeline YAML compressed into a .tgz (.tar.gz) file. # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.download_pipeline_files_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: urllib3.response.HTTPResponse (assuming _preload_content=False) - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method download_pipeline_files" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `download_pipeline_files`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/gzip']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines/{id}/download', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='file', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', False), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_pipeline(self, id, **kwargs): # noqa: E501 - """get_pipeline # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_pipeline(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiPipelineExtended - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_pipeline_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_pipeline_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_pipeline_with_http_info(self, id, **kwargs): # noqa: E501 - """get_pipeline # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_pipeline_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiPipelineExtended - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_pipeline" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_pipeline`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines/{id}', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiPipelineExtended', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def get_template(self, id, **kwargs): # noqa: E501 - """get_template # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_template(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGetTemplateResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.get_template_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.get_template_with_http_info(id, **kwargs) # noqa: E501 - return data - - def get_template_with_http_info(self, id, **kwargs): # noqa: E501 - """get_template # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_template_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :return: ApiGetTemplateResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method get_template" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `get_template`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines/{id}/templates', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiGetTemplateResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def list_pipelines(self, **kwargs): # noqa: E501 - """list_pipelines # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_pipelines(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Pipeline's attribute names and their respective values to be filtered for. - :return: ApiListPipelinesResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.list_pipelines_with_http_info(**kwargs) # noqa: E501 - else: - (data) = self.list_pipelines_with_http_info(**kwargs) # noqa: E501 - return data - - def list_pipelines_with_http_info(self, **kwargs): # noqa: E501 - """list_pipelines # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.list_pipelines_with_http_info(async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str page_token: - :param int page_size: - :param str sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :param str filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Pipeline's attribute names and their respective values to be filtered for. - :return: ApiListPipelinesResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['page_token', 'page_size', 'sort_by', 'filter'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method list_pipelines" % key - ) - params[key] = val - del params['kwargs'] - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'page_token' in params: - query_params.append(('page_token', params['page_token'])) # noqa: E501 - if 'page_size' in params: - query_params.append(('page_size', params['page_size'])) # noqa: E501 - if 'sort_by' in params: - query_params.append(('sort_by', params['sort_by'])) # noqa: E501 - if 'filter' in params: - query_params.append(('filter', params['filter'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines', 'GET', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiListPipelinesResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def run_custom_pipeline(self, run_custom_pipeline_payload, **kwargs): # noqa: E501 - """run_custom_pipeline # noqa: E501 - - Run a complex pipeline defined by a directed acyclic graph (DAG) # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_custom_pipeline(run_custom_pipeline_payload, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiPipelineCustomRunPayload run_custom_pipeline_payload: A custom pipeline defined by a directed acyclic graph (DAG) and input parameters (required) - :param str run_name: Name to identify the run on the Kubeflow Pipelines UI - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.run_custom_pipeline_with_http_info(run_custom_pipeline_payload, **kwargs) # noqa: E501 - else: - (data) = self.run_custom_pipeline_with_http_info(run_custom_pipeline_payload, **kwargs) # noqa: E501 - return data - - def run_custom_pipeline_with_http_info(self, run_custom_pipeline_payload, **kwargs): # noqa: E501 - """run_custom_pipeline # noqa: E501 - - Run a complex pipeline defined by a directed acyclic graph (DAG) # noqa: E501 - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_custom_pipeline_with_http_info(run_custom_pipeline_payload, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param ApiPipelineCustomRunPayload run_custom_pipeline_payload: A custom pipeline defined by a directed acyclic graph (DAG) and input parameters (required) - :param str run_name: Name to identify the run on the Kubeflow Pipelines UI - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['run_custom_pipeline_payload', 'run_name'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method run_custom_pipeline" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'run_custom_pipeline_payload' is set - if ('run_custom_pipeline_payload' not in params or - params['run_custom_pipeline_payload'] is None): - raise ValueError("Missing the required parameter `run_custom_pipeline_payload` when calling `run_custom_pipeline`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'run_name' in params: - query_params.append(('run_name', params['run_name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'run_custom_pipeline_payload' in params: - body_params = params['run_custom_pipeline_payload'] - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['application/json']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines/run_custom_pipeline', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiRunCodeResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def run_pipeline(self, id, **kwargs): # noqa: E501 - """run_pipeline # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_pipeline(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param str run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to pipeline name - :param Dictionary parameters: optional run parameters, may be required based on pipeline definition - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.run_pipeline_with_http_info(id, **kwargs) # noqa: E501 - else: - (data) = self.run_pipeline_with_http_info(id, **kwargs) # noqa: E501 - return data - - def run_pipeline_with_http_info(self, id, **kwargs): # noqa: E501 - """run_pipeline # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.run_pipeline_with_http_info(id, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str id: (required) - :param str run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to pipeline name - :param Dictionary parameters: optional run parameters, may be required based on pipeline definition - :return: ApiRunCodeResponse - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['id', 'run_name', 'parameters'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method run_pipeline" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'id' is set - if ('id' not in params or - params['id'] is None): - raise ValueError("Missing the required parameter `id` when calling `run_pipeline`") # noqa: E501 - - collection_formats = {} - - path_params = {} - if 'id' in params: - path_params['id'] = params['id'] # noqa: E501 - - query_params = [] - if 'run_name' in params: - query_params.append(('run_name', params['run_name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'parameters' in params: - body_params = params['parameters'] - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['application/json']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines/{id}/run', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiRunCodeResponse', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def set_featured_pipelines(self, pipeline_ids, **kwargs): # noqa: E501 - """set_featured_pipelines # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_featured_pipelines(pipeline_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] pipeline_ids: Array of pipeline IDs to be featured. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.set_featured_pipelines_with_http_info(pipeline_ids, **kwargs) # noqa: E501 - else: - (data) = self.set_featured_pipelines_with_http_info(pipeline_ids, **kwargs) # noqa: E501 - return data - - def set_featured_pipelines_with_http_info(self, pipeline_ids, **kwargs): # noqa: E501 - """set_featured_pipelines # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.set_featured_pipelines_with_http_info(pipeline_ids, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param list[str] pipeline_ids: Array of pipeline IDs to be featured. (required) - :return: None - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['pipeline_ids'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method set_featured_pipelines" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'pipeline_ids' is set - if ('pipeline_ids' not in params or - params['pipeline_ids'] is None): - raise ValueError("Missing the required parameter `pipeline_ids` when calling `set_featured_pipelines`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - - header_params = {} - - form_params = [] - local_var_files = {} - - body_params = None - if 'pipeline_ids' in params: - body_params = params['pipeline_ids'] - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines/featured', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type=None, # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_pipeline(self, uploadfile, **kwargs): # noqa: E501 - """upload_pipeline # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_pipeline(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The pipeline YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. (required) - :param str name: A name for this pipeline, optional - :param str description: A description for this pipeline, optional - :param str annotations: A string representation of a JSON dictionary of annotations describing this pipeline, optional. Example: {\"platform\": \"Kubeflow\", \"license\": \"Opensource\"} - :return: ApiPipelineExtended - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_pipeline_with_http_info(uploadfile, **kwargs) # noqa: E501 - else: - (data) = self.upload_pipeline_with_http_info(uploadfile, **kwargs) # noqa: E501 - return data - - def upload_pipeline_with_http_info(self, uploadfile, **kwargs): # noqa: E501 - """upload_pipeline # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_pipeline_with_http_info(uploadfile, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param file uploadfile: The pipeline YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. (required) - :param str name: A name for this pipeline, optional - :param str description: A description for this pipeline, optional - :param str annotations: A string representation of a JSON dictionary of annotations describing this pipeline, optional. Example: {\"platform\": \"Kubeflow\", \"license\": \"Opensource\"} - :return: ApiPipelineExtended - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['uploadfile', 'name', 'description', 'annotations'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_pipeline" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'uploadfile' is set - if ('uploadfile' not in params or - params['uploadfile'] is None): - raise ValueError("Missing the required parameter `uploadfile` when calling `upload_pipeline`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - if 'description' in params: - query_params.append(('description', params['description'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'uploadfile' in params: - local_var_files['uploadfile'] = params['uploadfile'] # noqa: E501 - if 'annotations' in params: - form_params.append(('annotations', params['annotations'])) # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines/upload', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiPipelineExtended', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) - - def upload_pipeline_from_url(self, url, **kwargs): # noqa: E501 - """upload_pipeline_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_pipeline_from_url(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the pipeline YAML file. (required) - :param str name: Optional, the name of the pipeline to be created overriding the name in the YAML file. - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiPipeline - If the method is called asynchronously, - returns the request thread. - """ - kwargs['_return_http_data_only'] = True - if kwargs.get('async_req'): - return self.upload_pipeline_from_url_with_http_info(url, **kwargs) # noqa: E501 - else: - (data) = self.upload_pipeline_from_url_with_http_info(url, **kwargs) # noqa: E501 - return data - - def upload_pipeline_from_url_with_http_info(self, url, **kwargs): # noqa: E501 - """upload_pipeline_from_url # noqa: E501 - - This method makes a synchronous HTTP request by default. To make an - asynchronous HTTP request, please pass async_req=True - >>> thread = api.upload_pipeline_from_url_with_http_info(url, async_req=True) - >>> result = thread.get() - - :param async_req bool - :param str url: URL pointing to the pipeline YAML file. (required) - :param str name: Optional, the name of the pipeline to be created overriding the name in the YAML file. - :param str access_token: Optional, the Bearer token to access the 'url'. - :return: ApiPipeline - If the method is called asynchronously, - returns the request thread. - """ - - all_params = ['url', 'name', 'access_token'] # noqa: E501 - all_params.append('async_req') - all_params.append('_return_http_data_only') - all_params.append('_preload_content') - all_params.append('_request_timeout') - - params = locals() - for key, val in six.iteritems(params['kwargs']): - if key not in all_params: - raise TypeError( - "Got an unexpected keyword argument '%s'" - " to method upload_pipeline_from_url" % key - ) - params[key] = val - del params['kwargs'] - # verify the required parameter 'url' is set - if ('url' not in params or - params['url'] is None): - raise ValueError("Missing the required parameter `url` when calling `upload_pipeline_from_url`") # noqa: E501 - - collection_formats = {} - - path_params = {} - - query_params = [] - if 'name' in params: - query_params.append(('name', params['name'])) # noqa: E501 - - header_params = {} - - form_params = [] - local_var_files = {} - if 'url' in params: - form_params.append(('url', params['url'])) # noqa: E501 - if 'access_token' in params: - form_params.append(('access_token', params['access_token'])) # noqa: E501 - - body_params = None - # HTTP header `Accept` - header_params['Accept'] = self.api_client.select_header_accept( - ['application/json']) # noqa: E501 - - # HTTP header `Content-Type` - header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 - ['multipart/form-data']) # noqa: E501 - - # Authentication setting - auth_settings = [] # noqa: E501 - - return self.api_client.call_api( - '/pipelines/upload_from_url', 'POST', - path_params, - query_params, - header_params, - body=body_params, - post_params=form_params, - files=local_var_files, - response_type='ApiPipeline', # noqa: E501 - auth_settings=auth_settings, - async_req=params.get('async_req'), - _return_http_data_only=params.get('_return_http_data_only'), - _preload_content=params.get('_preload_content', True), - _request_timeout=params.get('_request_timeout'), - collection_formats=collection_formats) diff --git a/api/client/swagger_client/api_client.py b/api/client/swagger_client/api_client.py deleted file mode 100644 index d1301ef2..00000000 --- a/api/client/swagger_client/api_client.py +++ /dev/null @@ -1,641 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -from __future__ import absolute_import - -import datetime -import json -import mimetypes -from multiprocessing.pool import ThreadPool -import os -import re -import tempfile - -# python 2 and python 3 compatibility library -import six -from six.moves.urllib.parse import quote - -from swagger_client.configuration import Configuration -import swagger_client.models -from swagger_client import rest - - -class ApiClient(object): - """Generic API client for Swagger client library builds. - - Swagger generic API client. This client handles the client- - server communication, and is invariant across implementations. Specifics of - the methods and models for each application are generated from the Swagger - templates. - - NOTE: This class is auto generated by the swagger code generator program. - Ref: https://github.com/swagger-api/swagger-codegen - Do not edit the class manually. - - :param configuration: .Configuration object for this client - :param header_name: a header to pass when making calls to the API. - :param header_value: a header value to pass when making calls to - the API. - :param cookie: a cookie to include in the header when making calls - to the API - """ - - PRIMITIVE_TYPES = (float, bool, bytes, six.text_type) + six.integer_types - NATIVE_TYPES_MAPPING = { - 'int': int, - 'long': int if six.PY3 else long, # noqa: F821 - 'float': float, - 'str': str, - 'bool': bool, - 'date': datetime.date, - 'datetime': datetime.datetime, - 'object': object, - } - - def __init__(self, configuration=None, header_name=None, header_value=None, - cookie=None): - if configuration is None: - configuration = Configuration() - self.configuration = configuration - - # Use the pool property to lazily initialize the ThreadPool. - self._pool = None - self.rest_client = rest.RESTClientObject(configuration) - self.default_headers = {} - if header_name is not None: - self.default_headers[header_name] = header_value - self.cookie = cookie - # Set default User-Agent. - self.user_agent = 'Swagger-Codegen/1.0.0/python' - - def __del__(self): - if self._pool is not None: - self._pool.close() - self._pool.join() - - @property - def pool(self): - if self._pool is None: - self._pool = ThreadPool() - return self._pool - - @property - def user_agent(self): - """User agent for this API client""" - return self.default_headers['User-Agent'] - - @user_agent.setter - def user_agent(self, value): - self.default_headers['User-Agent'] = value - - def set_default_header(self, header_name, header_value): - self.default_headers[header_name] = header_value - - def __call_api( - self, resource_path, method, path_params=None, - query_params=None, header_params=None, body=None, post_params=None, - files=None, response_type=None, auth_settings=None, - _return_http_data_only=None, collection_formats=None, - _preload_content=True, _request_timeout=None): - - config = self.configuration - - # header parameters - header_params = header_params or {} - header_params.update(self.default_headers) - if self.cookie: - header_params['Cookie'] = self.cookie - if header_params: - header_params = self.sanitize_for_serialization(header_params) - header_params = dict(self.parameters_to_tuples(header_params, - collection_formats)) - - # path parameters - if path_params: - path_params = self.sanitize_for_serialization(path_params) - path_params = self.parameters_to_tuples(path_params, - collection_formats) - for k, v in path_params: - # specified safe chars, encode everything - resource_path = resource_path.replace( - '{%s}' % k, - quote(str(v), safe=config.safe_chars_for_path_param) - ) - - # query parameters - if query_params: - query_params = self.sanitize_for_serialization(query_params) - query_params = self.parameters_to_tuples(query_params, - collection_formats) - - # post parameters - if post_params or files: - post_params = self.prepare_post_parameters(post_params, files) - post_params = self.sanitize_for_serialization(post_params) - post_params = self.parameters_to_tuples(post_params, - collection_formats) - - # auth setting - self.update_params_for_auth(header_params, query_params, auth_settings) - - # body - if body: - body = self.sanitize_for_serialization(body) - - # request url - url = self.configuration.host + resource_path - - # perform request and return response - response_data = self.request( - method, url, query_params=query_params, headers=header_params, - post_params=post_params, body=body, - _preload_content=_preload_content, - _request_timeout=_request_timeout) - - self.last_response = response_data - - return_data = response_data - if _preload_content: - # deserialize response data - if response_type: - return_data = self.deserialize(response_data, response_type) - else: - return_data = None - - if _return_http_data_only: - return (return_data) - else: - return (return_data, response_data.status, - response_data.getheaders()) - - def sanitize_for_serialization(self, obj): - """Builds a JSON POST object. - - If obj is None, return None. - If obj is str, int, long, float, bool, return directly. - If obj is datetime.datetime, datetime.date - convert to string in iso8601 format. - If obj is list, sanitize each element in the list. - If obj is dict, return the dict. - If obj is swagger model, return the properties dict. - - :param obj: The data to serialize. - :return: The serialized form of data. - """ - if obj is None: - return None - elif isinstance(obj, self.PRIMITIVE_TYPES): - return obj - elif isinstance(obj, list): - return [self.sanitize_for_serialization(sub_obj) - for sub_obj in obj] - elif isinstance(obj, tuple): - return tuple(self.sanitize_for_serialization(sub_obj) - for sub_obj in obj) - elif isinstance(obj, (datetime.datetime, datetime.date)): - return obj.isoformat() - - if isinstance(obj, dict): - obj_dict = obj - else: - # Convert model obj to dict except - # attributes `swagger_types`, `attribute_map` - # and attributes which value is not None. - # Convert attribute name to json key in - # model definition for request. - obj_dict = {obj.attribute_map[attr]: getattr(obj, attr) - for attr, _ in six.iteritems(obj.swagger_types) - if getattr(obj, attr) is not None} - - return {key: self.sanitize_for_serialization(val) - for key, val in six.iteritems(obj_dict)} - - def deserialize(self, response, response_type): - """Deserializes response into an object. - - :param response: RESTResponse object to be deserialized. - :param response_type: class literal for - deserialized object, or string of class name. - - :return: deserialized object. - """ - # handle file downloading - # save response body into a tmp file and return the instance - if response_type == "file": - return self.__deserialize_file(response) - - # fetch data from response object - try: - data = json.loads(response.data) - except ValueError: - data = response.data - - return self.__deserialize(data, response_type) - - def __deserialize(self, data, klass): - """Deserializes dict, list, str into an object. - - :param data: dict, list or str. - :param klass: class literal, or string of class name. - - :return: object. - """ - if data is None: - return None - - if type(klass) == str: - if klass.startswith('list['): - sub_kls = re.match(r'list\[(.*)\]', klass).group(1) - return [self.__deserialize(sub_data, sub_kls) - for sub_data in data] - - if klass.startswith('dict('): - sub_kls = re.match(r'dict\(([^,]*), (.*)\)', klass).group(2) - return {k: self.__deserialize(v, sub_kls) - for k, v in six.iteritems(data)} - - # convert str to class - if klass in self.NATIVE_TYPES_MAPPING: - klass = self.NATIVE_TYPES_MAPPING[klass] - else: - klass = getattr(swagger_client.models, klass) - - if klass in self.PRIMITIVE_TYPES: - return self.__deserialize_primitive(data, klass) - elif klass == object: - return self.__deserialize_object(data) - elif klass == datetime.date: - return self.__deserialize_date(data) - elif klass == datetime.datetime: - return self.__deserialize_datatime(data) - else: - return self.__deserialize_model(data, klass) - - def call_api(self, resource_path, method, - path_params=None, query_params=None, header_params=None, - body=None, post_params=None, files=None, - response_type=None, auth_settings=None, async_req=None, - _return_http_data_only=None, collection_formats=None, - _preload_content=True, _request_timeout=None): - """Makes the HTTP request (synchronous) and returns deserialized data. - - To make an async request, set the async_req parameter. - - :param resource_path: Path to method endpoint. - :param method: Method to call. - :param path_params: Path parameters in the url. - :param query_params: Query parameters in the url. - :param header_params: Header parameters to be - placed in the request header. - :param body: Request body. - :param post_params dict: Request post form parameters, - for `application/x-www-form-urlencoded`, `multipart/form-data`. - :param auth_settings list: Auth Settings names for the request. - :param response: Response data type. - :param files dict: key -> filename, value -> filepath, - for `multipart/form-data`. - :param async_req bool: execute request asynchronously - :param _return_http_data_only: response data without head status code - and headers - :param collection_formats: dict of collection formats for path, query, - header, and post parameters. - :param _preload_content: if False, the urllib3.HTTPResponse object will - be returned without reading/decoding response - data. Default is True. - :param _request_timeout: timeout setting for this request. If one - number provided, it will be total request - timeout. It can also be a pair (tuple) of - (connection, read) timeouts. - :return: - If async_req parameter is True, - the request will be called asynchronously. - The method will return the request thread. - If parameter async_req is False or missing, - then the method will return the response directly. - """ - if not async_req: - return self.__call_api(resource_path, method, - path_params, query_params, header_params, - body, post_params, files, - response_type, auth_settings, - _return_http_data_only, collection_formats, - _preload_content, _request_timeout) - else: - thread = self.pool.apply_async(self.__call_api, (resource_path, - method, path_params, query_params, - header_params, body, - post_params, files, - response_type, auth_settings, - _return_http_data_only, - collection_formats, - _preload_content, _request_timeout)) - return thread - - def request(self, method, url, query_params=None, headers=None, - post_params=None, body=None, _preload_content=True, - _request_timeout=None): - """Makes the HTTP request using RESTClient.""" - if method == "GET": - return self.rest_client.GET(url, - query_params=query_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - headers=headers) - elif method == "HEAD": - return self.rest_client.HEAD(url, - query_params=query_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - headers=headers) - elif method == "OPTIONS": - return self.rest_client.OPTIONS(url, - query_params=query_params, - headers=headers, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body) - elif method == "POST": - return self.rest_client.POST(url, - query_params=query_params, - headers=headers, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body) - elif method == "PUT": - return self.rest_client.PUT(url, - query_params=query_params, - headers=headers, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body) - elif method == "PATCH": - return self.rest_client.PATCH(url, - query_params=query_params, - headers=headers, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body) - elif method == "DELETE": - return self.rest_client.DELETE(url, - query_params=query_params, - headers=headers, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body) - else: - raise ValueError( - "http method must be `GET`, `HEAD`, `OPTIONS`," - " `POST`, `PATCH`, `PUT` or `DELETE`." - ) - - def parameters_to_tuples(self, params, collection_formats): - """Get parameters as list of tuples, formatting collections. - - :param params: Parameters as dict or list of two-tuples - :param dict collection_formats: Parameter collection formats - :return: Parameters as list of tuples, collections formatted - """ - new_params = [] - if collection_formats is None: - collection_formats = {} - for k, v in six.iteritems(params) if isinstance(params, dict) else params: # noqa: E501 - if k in collection_formats: - collection_format = collection_formats[k] - if collection_format == 'multi': - new_params.extend((k, value) for value in v) - else: - if collection_format == 'ssv': - delimiter = ' ' - elif collection_format == 'tsv': - delimiter = '\t' - elif collection_format == 'pipes': - delimiter = '|' - else: # csv is the default - delimiter = ',' - new_params.append( - (k, delimiter.join(str(value) for value in v))) - else: - new_params.append((k, v)) - return new_params - - def prepare_post_parameters(self, post_params=None, files=None): - """Builds form parameters. - - :param post_params: Normal form parameters. - :param files: File parameters. - :return: Form parameters with files. - """ - params = [] - - if post_params: - params = post_params - - if files: - for k, v in six.iteritems(files): - if not v: - continue - file_names = v if type(v) is list else [v] - for n in file_names: - with open(n, 'rb') as f: - filename = os.path.basename(f.name) - filedata = f.read() - mimetype = (mimetypes.guess_type(filename)[0] or - 'application/octet-stream') - params.append( - tuple([k, tuple([filename, filedata, mimetype])])) - - return params - - def select_header_accept(self, accepts): - """Returns `Accept` based on an array of accepts provided. - - :param accepts: List of headers. - :return: Accept (e.g. application/json). - """ - if not accepts: - return - - accepts = [x.lower() for x in accepts] - - if 'application/json' in accepts: - return 'application/json' - else: - return ', '.join(accepts) - - def select_header_content_type(self, content_types): - """Returns `Content-Type` based on an array of content_types provided. - - :param content_types: List of content-types. - :return: Content-Type (e.g. application/json). - """ - if not content_types: - return 'application/json' - - content_types = [x.lower() for x in content_types] - - if 'application/json' in content_types or '*/*' in content_types: - return 'application/json' - else: - return content_types[0] - - def update_params_for_auth(self, headers, querys, auth_settings): - """Updates header and query params based on authentication setting. - - :param headers: Header parameters dict to be updated. - :param querys: Query parameters tuple list to be updated. - :param auth_settings: Authentication setting identifiers list. - """ - if not auth_settings: - return - - for auth in auth_settings: - auth_setting = self.configuration.auth_settings().get(auth) - if auth_setting: - if not auth_setting['value']: - continue - elif auth_setting['in'] == 'header': - headers[auth_setting['key']] = auth_setting['value'] - elif auth_setting['in'] == 'query': - querys.append((auth_setting['key'], auth_setting['value'])) - else: - raise ValueError( - 'Authentication token must be in `query` or `header`' - ) - - def __deserialize_file(self, response): - """Deserializes body to file - - Saves response body into a file in a temporary folder, - using the filename from the `Content-Disposition` header if provided. - - :param response: RESTResponse. - :return: file path. - """ - fd, path = tempfile.mkstemp(dir=self.configuration.temp_folder_path) - os.close(fd) - os.remove(path) - - content_disposition = response.getheader("Content-Disposition") - if content_disposition: - filename = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', - content_disposition).group(1) - path = os.path.join(os.path.dirname(path), filename) - - with open(path, "wb") as f: - f.write(response.data) - - return path - - def __deserialize_primitive(self, data, klass): - """Deserializes string to primitive type. - - :param data: str. - :param klass: class literal. - - :return: int, long, float, str, bool. - """ - try: - return klass(data) - except UnicodeEncodeError: - return six.text_type(data) - except TypeError: - return data - - def __deserialize_object(self, value): - """Return a original value. - - :return: object. - """ - return value - - def __deserialize_date(self, string): - """Deserializes string to date. - - :param string: str. - :return: date. - """ - try: - from dateutil.parser import parse - return parse(string).date() - except ImportError: - return string - except ValueError: - raise rest.ApiException( - status=0, - reason="Failed to parse `{0}` as date object".format(string) - ) - - def __deserialize_datatime(self, string): - """Deserializes string to datetime. - - The string should be in iso8601 datetime format. - - :param string: str. - :return: datetime. - """ - try: - from dateutil.parser import parse - return parse(string) - except ImportError: - return string - except ValueError: - raise rest.ApiException( - status=0, - reason=( - "Failed to parse `{0}` as datetime object" - .format(string) - ) - ) - - def __hasattr(self, object, name): - return name in object.__class__.__dict__ - - def __deserialize_model(self, data, klass): - """Deserializes list or dict to model. - - :param data: dict, list. - :param klass: class literal. - :return: model object. - """ - - if (not klass.swagger_types and - not self.__hasattr(klass, 'get_real_child_model')): - return data - - kwargs = {} - if klass.swagger_types is not None: - for attr, attr_type in six.iteritems(klass.swagger_types): - if (data is not None and - klass.attribute_map[attr] in data and - isinstance(data, (list, dict))): - value = data[klass.attribute_map[attr]] - kwargs[attr] = self.__deserialize(value, attr_type) - - instance = klass(**kwargs) - - if (isinstance(instance, dict) and - klass.swagger_types is not None and - isinstance(data, dict)): - for key, value in data.items(): - if key not in klass.swagger_types: - instance[key] = value - if self.__hasattr(instance, 'get_real_child_model'): - klass_name = instance.get_real_child_model(data) - if klass_name: - instance = self.__deserialize(data, klass_name) - return instance diff --git a/api/client/swagger_client/configuration.py b/api/client/swagger_client/configuration.py deleted file mode 100644 index 972d8de9..00000000 --- a/api/client/swagger_client/configuration.py +++ /dev/null @@ -1,240 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import copy -import logging -import multiprocessing -import sys -import urllib3 - -import six -from six.moves import http_client as httplib - - -class Configuration(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Ref: https://github.com/swagger-api/swagger-codegen - Do not edit the class manually. - """ - - _default = None - - def __init__(self): - """Constructor""" - if self._default: - for key in self._default.__dict__.keys(): - self.__dict__[key] = copy.copy(self._default.__dict__[key]) - return - - # Default Base url - self.host = "http://localhost/apis/v1alpha1" - # Temp file folder for downloading files - self.temp_folder_path = None - - # Authentication Settings - # dict to store API key(s) - self.api_key = {} - # dict to store API prefix (e.g. Bearer) - self.api_key_prefix = {} - # Username for HTTP basic authentication - self.username = "" - # Password for HTTP basic authentication - self.password = "" - - # Logging Settings - self.logger = {} - self.logger["package_logger"] = logging.getLogger("swagger_client") - self.logger["urllib3_logger"] = logging.getLogger("urllib3") - # Log format - self.logger_format = '%(asctime)s %(levelname)s %(message)s' - # Log stream handler - self.logger_stream_handler = None - # Log file handler - self.logger_file_handler = None - # Debug file location - self.logger_file = None - # Debug switch - self.debug = False - - # SSL/TLS verification - # Set this to False to skip verifying SSL certificate when calling API - # from https server. - self.verify_ssl = True - # Set this to customize the certificate file to verify the peer. - self.ssl_ca_cert = None - # client certificate file - self.cert_file = None - # client key file - self.key_file = None - # Set this to True/False to enable/disable SSL hostname verification. - self.assert_hostname = None - - # urllib3 connection pool's maximum number of connections saved - # per pool. urllib3 uses 1 connection as default value, but this is - # not the best value when you are making a lot of possibly parallel - # requests to the same host, which is often the case here. - # cpu_count * 5 is used as default value to increase performance. - self.connection_pool_maxsize = multiprocessing.cpu_count() * 5 - - # Proxy URL - self.proxy = None - # Safe chars for path_param - self.safe_chars_for_path_param = '' - - @classmethod - def set_default(cls, default): - cls._default = default - - @property - def logger_file(self): - """The logger file. - - If the logger_file is None, then add stream handler and remove file - handler. Otherwise, add file handler and remove stream handler. - - :param value: The logger_file path. - :type: str - """ - return self.__logger_file - - @logger_file.setter - def logger_file(self, value): - """The logger file. - - If the logger_file is None, then add stream handler and remove file - handler. Otherwise, add file handler and remove stream handler. - - :param value: The logger_file path. - :type: str - """ - self.__logger_file = value - if self.__logger_file: - # If set logging file, - # then add file handler and remove stream handler. - self.logger_file_handler = logging.FileHandler(self.__logger_file) - self.logger_file_handler.setFormatter(self.logger_formatter) - for _, logger in six.iteritems(self.logger): - logger.addHandler(self.logger_file_handler) - if self.logger_stream_handler: - logger.removeHandler(self.logger_stream_handler) - else: - # If not set logging file, - # then add stream handler and remove file handler. - self.logger_stream_handler = logging.StreamHandler() - self.logger_stream_handler.setFormatter(self.logger_formatter) - for _, logger in six.iteritems(self.logger): - logger.addHandler(self.logger_stream_handler) - if self.logger_file_handler: - logger.removeHandler(self.logger_file_handler) - - @property - def debug(self): - """Debug status - - :param value: The debug status, True or False. - :type: bool - """ - return self.__debug - - @debug.setter - def debug(self, value): - """Debug status - - :param value: The debug status, True or False. - :type: bool - """ - self.__debug = value - if self.__debug: - # if debug status is True, turn on debug logging - for _, logger in six.iteritems(self.logger): - logger.setLevel(logging.DEBUG) - # turn on httplib debug - httplib.HTTPConnection.debuglevel = 1 - else: - # if debug status is False, turn off debug logging, - # setting log level to default `logging.WARNING` - for _, logger in six.iteritems(self.logger): - logger.setLevel(logging.WARNING) - # turn off httplib debug - httplib.HTTPConnection.debuglevel = 0 - - @property - def logger_format(self): - """The logger format. - - The logger_formatter will be updated when sets logger_format. - - :param value: The format string. - :type: str - """ - return self.__logger_format - - @logger_format.setter - def logger_format(self, value): - """The logger format. - - The logger_formatter will be updated when sets logger_format. - - :param value: The format string. - :type: str - """ - self.__logger_format = value - self.logger_formatter = logging.Formatter(self.__logger_format) - - def get_api_key_with_prefix(self, identifier): - """Gets API key (with prefix if set). - - :param identifier: The identifier of apiKey. - :return: The token for api key authentication. - """ - if (self.api_key.get(identifier) and - self.api_key_prefix.get(identifier)): - return self.api_key_prefix[identifier] + ' ' + self.api_key[identifier] # noqa: E501 - elif self.api_key.get(identifier): - return self.api_key[identifier] - - def get_basic_auth_token(self): - """Gets HTTP basic authentication header (string). - - :return: The token for basic HTTP authentication. - """ - return urllib3.util.make_headers( - basic_auth=self.username + ':' + self.password - ).get('authorization') - - def auth_settings(self): - """Gets Auth Settings dict for api client. - - :return: The Auth Settings information dict. - """ - return { - - } - - def to_debug_report(self): - """Gets the essential information for debugging. - - :return: The report for debugging. - """ - return "Python SDK Debug Report:\n"\ - "OS: {env}\n"\ - "Python Version: {pyversion}\n"\ - "Version of the API: 0.1.30-upload-catalog-from-url\n"\ - "SDK Package Version: 0.1.0".\ - format(env=sys.platform, pyversion=sys.version) diff --git a/api/client/swagger_client/models/__init__.py b/api/client/swagger_client/models/__init__.py deleted file mode 100644 index a158fbb7..00000000 --- a/api/client/swagger_client/models/__init__.py +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -# flake8: noqa -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -# import models into model package -from swagger_client.models.any_value import AnyValue -from swagger_client.models.api_access_token import ApiAccessToken -from swagger_client.models.api_asset import ApiAsset -from swagger_client.models.api_catalog_upload import ApiCatalogUpload -from swagger_client.models.api_catalog_upload_item import ApiCatalogUploadItem -from swagger_client.models.api_credential import ApiCredential -from swagger_client.models.api_generate_code_response import ApiGenerateCodeResponse -from swagger_client.models.api_generate_model_code_response import ApiGenerateModelCodeResponse -from swagger_client.models.api_get_template_response import ApiGetTemplateResponse -from swagger_client.models.api_inferenceservice import ApiInferenceservice -from swagger_client.models.api_list_catalog_items_response import ApiListCatalogItemsResponse -from swagger_client.models.api_list_catalog_upload_errors import ApiListCatalogUploadErrors -from swagger_client.models.api_list_components_response import ApiListComponentsResponse -from swagger_client.models.api_list_credentials_response import ApiListCredentialsResponse -from swagger_client.models.api_list_datasets_response import ApiListDatasetsResponse -from swagger_client.models.api_list_inferenceservices_response import ApiListInferenceservicesResponse -from swagger_client.models.api_list_models_response import ApiListModelsResponse -from swagger_client.models.api_list_notebooks_response import ApiListNotebooksResponse -from swagger_client.models.api_list_pipelines_response import ApiListPipelinesResponse -from swagger_client.models.api_metadata import ApiMetadata -from swagger_client.models.api_model_framework import ApiModelFramework -from swagger_client.models.api_model_framework_runtimes import ApiModelFrameworkRuntimes -from swagger_client.models.api_model_script import ApiModelScript -from swagger_client.models.api_parameter import ApiParameter -from swagger_client.models.api_pipeline import ApiPipeline -from swagger_client.models.api_pipeline_custom import ApiPipelineCustom -from swagger_client.models.api_pipeline_custom_run_payload import ApiPipelineCustomRunPayload -from swagger_client.models.api_pipeline_dag import ApiPipelineDAG -from swagger_client.models.api_pipeline_extension import ApiPipelineExtension -from swagger_client.models.api_pipeline_inputs import ApiPipelineInputs -from swagger_client.models.api_pipeline_task import ApiPipelineTask -from swagger_client.models.api_pipeline_task_arguments import ApiPipelineTaskArguments -from swagger_client.models.api_run_code_response import ApiRunCodeResponse -from swagger_client.models.api_settings import ApiSettings -from swagger_client.models.api_settings_section import ApiSettingsSection -from swagger_client.models.api_status import ApiStatus -from swagger_client.models.api_url import ApiUrl -from swagger_client.models.dictionary import Dictionary -from swagger_client.models.protobuf_any import ProtobufAny -from swagger_client.models.api_catalog_upload_error import ApiCatalogUploadError -from swagger_client.models.api_catalog_upload_response import ApiCatalogUploadResponse -from swagger_client.models.api_component import ApiComponent -from swagger_client.models.api_dataset import ApiDataset -from swagger_client.models.api_model import ApiModel -from swagger_client.models.api_notebook import ApiNotebook -from swagger_client.models.api_pipeline_extended import ApiPipelineExtended diff --git a/api/client/swagger_client/models/any_value.py b/api/client/swagger_client/models/any_value.py deleted file mode 100644 index 6c3b1192..00000000 --- a/api/client/swagger_client/models/any_value.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class AnyValue(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - } - - attribute_map = { - } - - def __init__(self): # noqa: E501 - """AnyValue - a model defined in Swagger""" # noqa: E501 - self.discriminator = None - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(AnyValue, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, AnyValue): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_access_token.py b/api/client/swagger_client/models/api_access_token.py deleted file mode 100644 index 3bea5f88..00000000 --- a/api/client/swagger_client/models/api_access_token.py +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiAccessToken(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'api_token': 'str', - 'url_host': 'str' - } - - attribute_map = { - 'api_token': 'api_token', - 'url_host': 'url_host' - } - - def __init__(self, api_token=None, url_host=None): # noqa: E501 - """ApiAccessToken - a model defined in Swagger""" # noqa: E501 - - self._api_token = None - self._url_host = None - self.discriminator = None - - self.api_token = api_token - self.url_host = url_host - - @property - def api_token(self): - """Gets the api_token of this ApiAccessToken. # noqa: E501 - - A read-only API access token. # noqa: E501 - - :return: The api_token of this ApiAccessToken. # noqa: E501 - :rtype: str - """ - return self._api_token - - @api_token.setter - def api_token(self, api_token): - """Sets the api_token of this ApiAccessToken. - - A read-only API access token. # noqa: E501 - - :param api_token: The api_token of this ApiAccessToken. # noqa: E501 - :type: str - """ - if api_token is None: - raise ValueError("Invalid value for `api_token`, must not be `None`") # noqa: E501 - - self._api_token = api_token - - @property - def url_host(self): - """Gets the url_host of this ApiAccessToken. # noqa: E501 - - The API server host that this API token applies to. # noqa: E501 - - :return: The url_host of this ApiAccessToken. # noqa: E501 - :rtype: str - """ - return self._url_host - - @url_host.setter - def url_host(self, url_host): - """Sets the url_host of this ApiAccessToken. - - The API server host that this API token applies to. # noqa: E501 - - :param url_host: The url_host of this ApiAccessToken. # noqa: E501 - :type: str - """ - if url_host is None: - raise ValueError("Invalid value for `url_host`, must not be `None`") # noqa: E501 - - self._url_host = url_host - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiAccessToken, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiAccessToken): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_asset.py b/api/client/swagger_client/models/api_asset.py deleted file mode 100644 index 2e2f45a6..00000000 --- a/api/client/swagger_client/models/api_asset.py +++ /dev/null @@ -1,302 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiAsset(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'id': 'str', - 'created_at': 'datetime', - 'name': 'str', - 'description': 'str', - 'featured': 'bool', - 'publish_approved': 'bool', - 'related_assets': 'list[str]', - 'filter_categories': 'dict(str, str)' - } - - attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'featured': 'featured', - 'publish_approved': 'publish_approved', - 'related_assets': 'related_assets', - 'filter_categories': 'filter_categories' - } - - def __init__(self, id=None, created_at=None, name=None, description=None, featured=None, publish_approved=None, related_assets=None, filter_categories=None): # noqa: E501 - """ApiAsset - a model defined in Swagger""" # noqa: E501 - - self._id = None - self._created_at = None - self._name = None - self._description = None - self._featured = None - self._publish_approved = None - self._related_assets = None - self._filter_categories = None - self.discriminator = None - - if id is not None: - self.id = id - if created_at is not None: - self.created_at = created_at - self.name = name - self.description = description - if featured is not None: - self.featured = featured - if publish_approved is not None: - self.publish_approved = publish_approved - if related_assets is not None: - self.related_assets = related_assets - if filter_categories is not None: - self.filter_categories = filter_categories - - @property - def id(self): - """Gets the id of this ApiAsset. # noqa: E501 - - - :return: The id of this ApiAsset. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this ApiAsset. - - - :param id: The id of this ApiAsset. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def created_at(self): - """Gets the created_at of this ApiAsset. # noqa: E501 - - - :return: The created_at of this ApiAsset. # noqa: E501 - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at): - """Sets the created_at of this ApiAsset. - - - :param created_at: The created_at of this ApiAsset. # noqa: E501 - :type: datetime - """ - - self._created_at = created_at - - @property - def name(self): - """Gets the name of this ApiAsset. # noqa: E501 - - - :return: The name of this ApiAsset. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiAsset. - - - :param name: The name of this ApiAsset. # noqa: E501 - :type: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self): - """Gets the description of this ApiAsset. # noqa: E501 - - - :return: The description of this ApiAsset. # noqa: E501 - :rtype: str - """ - return self._description - - @description.setter - def description(self, description): - """Sets the description of this ApiAsset. - - - :param description: The description of this ApiAsset. # noqa: E501 - :type: str - """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 - - self._description = description - - @property - def featured(self): - """Gets the featured of this ApiAsset. # noqa: E501 - - - :return: The featured of this ApiAsset. # noqa: E501 - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured): - """Sets the featured of this ApiAsset. - - - :param featured: The featured of this ApiAsset. # noqa: E501 - :type: bool - """ - - self._featured = featured - - @property - def publish_approved(self): - """Gets the publish_approved of this ApiAsset. # noqa: E501 - - - :return: The publish_approved of this ApiAsset. # noqa: E501 - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved): - """Sets the publish_approved of this ApiAsset. - - - :param publish_approved: The publish_approved of this ApiAsset. # noqa: E501 - :type: bool - """ - - self._publish_approved = publish_approved - - @property - def related_assets(self): - """Gets the related_assets of this ApiAsset. # noqa: E501 - - - :return: The related_assets of this ApiAsset. # noqa: E501 - :rtype: list[str] - """ - return self._related_assets - - @related_assets.setter - def related_assets(self, related_assets): - """Sets the related_assets of this ApiAsset. - - - :param related_assets: The related_assets of this ApiAsset. # noqa: E501 - :type: list[str] - """ - - self._related_assets = related_assets - - @property - def filter_categories(self): - """Gets the filter_categories of this ApiAsset. # noqa: E501 - - - :return: The filter_categories of this ApiAsset. # noqa: E501 - :rtype: dict(str, str) - """ - return self._filter_categories - - @filter_categories.setter - def filter_categories(self, filter_categories): - """Sets the filter_categories of this ApiAsset. - - - :param filter_categories: The filter_categories of this ApiAsset. # noqa: E501 - :type: dict(str, str) - """ - - self._filter_categories = filter_categories - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiAsset, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiAsset): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_catalog_upload.py b/api/client/swagger_client/models/api_catalog_upload.py deleted file mode 100644 index 8b6a22f5..00000000 --- a/api/client/swagger_client/models/api_catalog_upload.py +++ /dev/null @@ -1,250 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiCatalogUpload(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'api_access_tokens': 'list[ApiAccessToken]', - 'components': 'list[ApiCatalogUploadItem]', - 'datasets': 'list[ApiCatalogUploadItem]', - 'models': 'list[ApiCatalogUploadItem]', - 'notebooks': 'list[ApiCatalogUploadItem]', - 'pipelines': 'list[ApiCatalogUploadItem]' - } - - attribute_map = { - 'api_access_tokens': 'api_access_tokens', - 'components': 'components', - 'datasets': 'datasets', - 'models': 'models', - 'notebooks': 'notebooks', - 'pipelines': 'pipelines' - } - - def __init__(self, api_access_tokens=None, components=None, datasets=None, models=None, notebooks=None, pipelines=None): # noqa: E501 - """ApiCatalogUpload - a model defined in Swagger""" # noqa: E501 - - self._api_access_tokens = None - self._components = None - self._datasets = None - self._models = None - self._notebooks = None - self._pipelines = None - self.discriminator = None - - if api_access_tokens is not None: - self.api_access_tokens = api_access_tokens - if components is not None: - self.components = components - if datasets is not None: - self.datasets = datasets - if models is not None: - self.models = models - if notebooks is not None: - self.notebooks = notebooks - if pipelines is not None: - self.pipelines = pipelines - - @property - def api_access_tokens(self): - """Gets the api_access_tokens of this ApiCatalogUpload. # noqa: E501 - - A mapping of read-only API access tokens to a partial URL. # noqa: E501 - - :return: The api_access_tokens of this ApiCatalogUpload. # noqa: E501 - :rtype: list[ApiAccessToken] - """ - return self._api_access_tokens - - @api_access_tokens.setter - def api_access_tokens(self, api_access_tokens): - """Sets the api_access_tokens of this ApiCatalogUpload. - - A mapping of read-only API access tokens to a partial URL. # noqa: E501 - - :param api_access_tokens: The api_access_tokens of this ApiCatalogUpload. # noqa: E501 - :type: list[ApiAccessToken] - """ - - self._api_access_tokens = api_access_tokens - - @property - def components(self): - """Gets the components of this ApiCatalogUpload. # noqa: E501 - - - :return: The components of this ApiCatalogUpload. # noqa: E501 - :rtype: list[ApiCatalogUploadItem] - """ - return self._components - - @components.setter - def components(self, components): - """Sets the components of this ApiCatalogUpload. - - - :param components: The components of this ApiCatalogUpload. # noqa: E501 - :type: list[ApiCatalogUploadItem] - """ - - self._components = components - - @property - def datasets(self): - """Gets the datasets of this ApiCatalogUpload. # noqa: E501 - - - :return: The datasets of this ApiCatalogUpload. # noqa: E501 - :rtype: list[ApiCatalogUploadItem] - """ - return self._datasets - - @datasets.setter - def datasets(self, datasets): - """Sets the datasets of this ApiCatalogUpload. - - - :param datasets: The datasets of this ApiCatalogUpload. # noqa: E501 - :type: list[ApiCatalogUploadItem] - """ - - self._datasets = datasets - - @property - def models(self): - """Gets the models of this ApiCatalogUpload. # noqa: E501 - - - :return: The models of this ApiCatalogUpload. # noqa: E501 - :rtype: list[ApiCatalogUploadItem] - """ - return self._models - - @models.setter - def models(self, models): - """Sets the models of this ApiCatalogUpload. - - - :param models: The models of this ApiCatalogUpload. # noqa: E501 - :type: list[ApiCatalogUploadItem] - """ - - self._models = models - - @property - def notebooks(self): - """Gets the notebooks of this ApiCatalogUpload. # noqa: E501 - - - :return: The notebooks of this ApiCatalogUpload. # noqa: E501 - :rtype: list[ApiCatalogUploadItem] - """ - return self._notebooks - - @notebooks.setter - def notebooks(self, notebooks): - """Sets the notebooks of this ApiCatalogUpload. - - - :param notebooks: The notebooks of this ApiCatalogUpload. # noqa: E501 - :type: list[ApiCatalogUploadItem] - """ - - self._notebooks = notebooks - - @property - def pipelines(self): - """Gets the pipelines of this ApiCatalogUpload. # noqa: E501 - - - :return: The pipelines of this ApiCatalogUpload. # noqa: E501 - :rtype: list[ApiCatalogUploadItem] - """ - return self._pipelines - - @pipelines.setter - def pipelines(self, pipelines): - """Sets the pipelines of this ApiCatalogUpload. - - - :param pipelines: The pipelines of this ApiCatalogUpload. # noqa: E501 - :type: list[ApiCatalogUploadItem] - """ - - self._pipelines = pipelines - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiCatalogUpload, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiCatalogUpload): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_catalog_upload_error.py b/api/client/swagger_client/models/api_catalog_upload_error.py deleted file mode 100644 index bd2cb71b..00000000 --- a/api/client/swagger_client/models/api_catalog_upload_error.py +++ /dev/null @@ -1,199 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiCatalogUploadError(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'name': 'str', - 'url': 'str', - 'error_message': 'str', - 'status_code': 'int' - } - - attribute_map = { - 'name': 'name', - 'url': 'url', - 'error_message': 'error_message', - 'status_code': 'status_code' - } - - def __init__(self, name=None, url=None, error_message=None, status_code=None): # noqa: E501 - """ApiCatalogUploadError - a model defined in Swagger""" # noqa: E501 - - self._name = None - self._url = None - self._error_message = None - self._status_code = None - self.discriminator = None - - if name is not None: - self.name = name - self.url = url - if error_message is not None: - self.error_message = error_message - if status_code is not None: - self.status_code = status_code - - @property - def name(self): - """Gets the name of this ApiCatalogUploadError. # noqa: E501 - - - :return: The name of this ApiCatalogUploadError. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiCatalogUploadError. - - - :param name: The name of this ApiCatalogUploadError. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def url(self): - """Gets the url of this ApiCatalogUploadError. # noqa: E501 - - The URL to the YAML metadata file, i.e. on GitHub.com # noqa: E501 - - :return: The url of this ApiCatalogUploadError. # noqa: E501 - :rtype: str - """ - return self._url - - @url.setter - def url(self, url): - """Sets the url of this ApiCatalogUploadError. - - The URL to the YAML metadata file, i.e. on GitHub.com # noqa: E501 - - :param url: The url of this ApiCatalogUploadError. # noqa: E501 - :type: str - """ - if url is None: - raise ValueError("Invalid value for `url`, must not be `None`") # noqa: E501 - - self._url = url - - @property - def error_message(self): - """Gets the error_message of this ApiCatalogUploadError. # noqa: E501 - - - :return: The error_message of this ApiCatalogUploadError. # noqa: E501 - :rtype: str - """ - return self._error_message - - @error_message.setter - def error_message(self, error_message): - """Sets the error_message of this ApiCatalogUploadError. - - - :param error_message: The error_message of this ApiCatalogUploadError. # noqa: E501 - :type: str - """ - - self._error_message = error_message - - @property - def status_code(self): - """Gets the status_code of this ApiCatalogUploadError. # noqa: E501 - - - :return: The status_code of this ApiCatalogUploadError. # noqa: E501 - :rtype: int - """ - return self._status_code - - @status_code.setter - def status_code(self, status_code): - """Sets the status_code of this ApiCatalogUploadError. - - - :param status_code: The status_code of this ApiCatalogUploadError. # noqa: E501 - :type: int - """ - - self._status_code = status_code - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiCatalogUploadError, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiCatalogUploadError): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_catalog_upload_item.py b/api/client/swagger_client/models/api_catalog_upload_item.py deleted file mode 100644 index 96aea05e..00000000 --- a/api/client/swagger_client/models/api_catalog_upload_item.py +++ /dev/null @@ -1,147 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiCatalogUploadItem(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'name': 'str', - 'url': 'str' - } - - attribute_map = { - 'name': 'name', - 'url': 'url' - } - - def __init__(self, name=None, url=None): # noqa: E501 - """ApiCatalogUploadItem - a model defined in Swagger""" # noqa: E501 - - self._name = None - self._url = None - self.discriminator = None - - if name is not None: - self.name = name - self.url = url - - @property - def name(self): - """Gets the name of this ApiCatalogUploadItem. # noqa: E501 - - - :return: The name of this ApiCatalogUploadItem. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiCatalogUploadItem. - - - :param name: The name of this ApiCatalogUploadItem. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def url(self): - """Gets the url of this ApiCatalogUploadItem. # noqa: E501 - - The URL to the YAML metadata file, i.e. on GitHub.com # noqa: E501 - - :return: The url of this ApiCatalogUploadItem. # noqa: E501 - :rtype: str - """ - return self._url - - @url.setter - def url(self, url): - """Sets the url of this ApiCatalogUploadItem. - - The URL to the YAML metadata file, i.e. on GitHub.com # noqa: E501 - - :param url: The url of this ApiCatalogUploadItem. # noqa: E501 - :type: str - """ - if url is None: - raise ValueError("Invalid value for `url`, must not be `None`") # noqa: E501 - - self._url = url - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiCatalogUploadItem, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiCatalogUploadItem): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_catalog_upload_response.py b/api/client/swagger_client/models/api_catalog_upload_response.py deleted file mode 100644 index eab6cb44..00000000 --- a/api/client/swagger_client/models/api_catalog_upload_response.py +++ /dev/null @@ -1,352 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiCatalogUploadResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'components': 'list[ApiComponent]', - 'datasets': 'list[ApiDataset]', - 'models': 'list[ApiModel]', - 'notebooks': 'list[ApiNotebook]', - 'pipelines': 'list[ApiPipeline]', - 'total_size': 'int', - 'next_page_token': 'str', - 'errors': 'list[ApiCatalogUploadError]', - 'total_errors': 'int', - 'total_created': 'int' - } - - attribute_map = { - 'components': 'components', - 'datasets': 'datasets', - 'models': 'models', - 'notebooks': 'notebooks', - 'pipelines': 'pipelines', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token', - 'errors': 'errors', - 'total_errors': 'total_errors', - 'total_created': 'total_created' - } - - def __init__(self, components=None, datasets=None, models=None, notebooks=None, pipelines=None, total_size=None, next_page_token=None, errors=None, total_errors=None, total_created=None): # noqa: E501 - """ApiCatalogUploadResponse - a model defined in Swagger""" # noqa: E501 - - self._components = None - self._datasets = None - self._models = None - self._notebooks = None - self._pipelines = None - self._total_size = None - self._next_page_token = None - self._errors = None - self._total_errors = None - self._total_created = None - self.discriminator = None - - if components is not None: - self.components = components - if datasets is not None: - self.datasets = datasets - if models is not None: - self.models = models - if notebooks is not None: - self.notebooks = notebooks - if pipelines is not None: - self.pipelines = pipelines - if total_size is not None: - self.total_size = total_size - if next_page_token is not None: - self.next_page_token = next_page_token - if errors is not None: - self.errors = errors - if total_errors is not None: - self.total_errors = total_errors - if total_created is not None: - self.total_created = total_created - - @property - def components(self): - """Gets the components of this ApiCatalogUploadResponse. # noqa: E501 - - - :return: The components of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: list[ApiComponent] - """ - return self._components - - @components.setter - def components(self, components): - """Sets the components of this ApiCatalogUploadResponse. - - - :param components: The components of this ApiCatalogUploadResponse. # noqa: E501 - :type: list[ApiComponent] - """ - - self._components = components - - @property - def datasets(self): - """Gets the datasets of this ApiCatalogUploadResponse. # noqa: E501 - - - :return: The datasets of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: list[ApiDataset] - """ - return self._datasets - - @datasets.setter - def datasets(self, datasets): - """Sets the datasets of this ApiCatalogUploadResponse. - - - :param datasets: The datasets of this ApiCatalogUploadResponse. # noqa: E501 - :type: list[ApiDataset] - """ - - self._datasets = datasets - - @property - def models(self): - """Gets the models of this ApiCatalogUploadResponse. # noqa: E501 - - - :return: The models of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: list[ApiModel] - """ - return self._models - - @models.setter - def models(self, models): - """Sets the models of this ApiCatalogUploadResponse. - - - :param models: The models of this ApiCatalogUploadResponse. # noqa: E501 - :type: list[ApiModel] - """ - - self._models = models - - @property - def notebooks(self): - """Gets the notebooks of this ApiCatalogUploadResponse. # noqa: E501 - - - :return: The notebooks of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: list[ApiNotebook] - """ - return self._notebooks - - @notebooks.setter - def notebooks(self, notebooks): - """Sets the notebooks of this ApiCatalogUploadResponse. - - - :param notebooks: The notebooks of this ApiCatalogUploadResponse. # noqa: E501 - :type: list[ApiNotebook] - """ - - self._notebooks = notebooks - - @property - def pipelines(self): - """Gets the pipelines of this ApiCatalogUploadResponse. # noqa: E501 - - - :return: The pipelines of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: list[ApiPipeline] - """ - return self._pipelines - - @pipelines.setter - def pipelines(self, pipelines): - """Sets the pipelines of this ApiCatalogUploadResponse. - - - :param pipelines: The pipelines of this ApiCatalogUploadResponse. # noqa: E501 - :type: list[ApiPipeline] - """ - - self._pipelines = pipelines - - @property - def total_size(self): - """Gets the total_size of this ApiCatalogUploadResponse. # noqa: E501 - - - :return: The total_size of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size): - """Sets the total_size of this ApiCatalogUploadResponse. - - - :param total_size: The total_size of this ApiCatalogUploadResponse. # noqa: E501 - :type: int - """ - - self._total_size = total_size - - @property - def next_page_token(self): - """Gets the next_page_token of this ApiCatalogUploadResponse. # noqa: E501 - - - :return: The next_page_token of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token): - """Sets the next_page_token of this ApiCatalogUploadResponse. - - - :param next_page_token: The next_page_token of this ApiCatalogUploadResponse. # noqa: E501 - :type: str - """ - - self._next_page_token = next_page_token - - @property - def errors(self): - """Gets the errors of this ApiCatalogUploadResponse. # noqa: E501 - - - :return: The errors of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: list[ApiCatalogUploadError] - """ - return self._errors - - @errors.setter - def errors(self, errors): - """Sets the errors of this ApiCatalogUploadResponse. - - - :param errors: The errors of this ApiCatalogUploadResponse. # noqa: E501 - :type: list[ApiCatalogUploadError] - """ - - self._errors = errors - - @property - def total_errors(self): - """Gets the total_errors of this ApiCatalogUploadResponse. # noqa: E501 - - - :return: The total_errors of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: int - """ - return self._total_errors - - @total_errors.setter - def total_errors(self, total_errors): - """Sets the total_errors of this ApiCatalogUploadResponse. - - - :param total_errors: The total_errors of this ApiCatalogUploadResponse. # noqa: E501 - :type: int - """ - - self._total_errors = total_errors - - @property - def total_created(self): - """Gets the total_created of this ApiCatalogUploadResponse. # noqa: E501 - - - :return: The total_created of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: int - """ - return self._total_created - - @total_created.setter - def total_created(self, total_created): - """Sets the total_created of this ApiCatalogUploadResponse. - - - :param total_created: The total_created of this ApiCatalogUploadResponse. # noqa: E501 - :type: int - """ - - self._total_created = total_created - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiCatalogUploadResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiCatalogUploadResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_component.py b/api/client/swagger_client/models/api_component.py deleted file mode 100644 index 57edd56b..00000000 --- a/api/client/swagger_client/models/api_component.py +++ /dev/null @@ -1,358 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_asset import ApiAsset -from swagger_client.models.api_metadata import ApiMetadata # noqa: F401,E501 -from swagger_client.models.api_parameter import ApiParameter # noqa: F401,E501 - - -class ApiComponent(ApiAsset): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'id': 'str', - 'created_at': 'datetime', - 'name': 'str', - 'description': 'str', - 'featured': 'bool', - 'publish_approved': 'bool', - 'related_assets': 'list[str]', - 'filter_categories': 'dict(str, str)', - 'metadata': 'ApiMetadata', - 'parameters': 'list[ApiParameter]' - } - - attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'featured': 'featured', - 'publish_approved': 'publish_approved', - 'related_assets': 'related_assets', - 'filter_categories': 'filter_categories', - 'metadata': 'metadata', - 'parameters': 'parameters' - } - - def __init__(self, id=None, created_at=None, name=None, description=None, featured=None, publish_approved=None, related_assets=None, filter_categories=None, metadata=None, parameters=None): # noqa: E501 - """ApiComponent - a model defined in Swagger""" # noqa: E501 - - self._id = None - self._created_at = None - self._name = None - self._description = None - self._featured = None - self._publish_approved = None - self._related_assets = None - self._filter_categories = None - self._metadata = None - self._parameters = None - self.discriminator = None - - if id is not None: - self.id = id - if created_at is not None: - self.created_at = created_at - self.name = name - self.description = description - if featured is not None: - self.featured = featured - if publish_approved is not None: - self.publish_approved = publish_approved - if related_assets is not None: - self.related_assets = related_assets - if filter_categories is not None: - self.filter_categories = filter_categories - if metadata is not None: - self.metadata = metadata - if parameters is not None: - self.parameters = parameters - - @property - def id(self): - """Gets the id of this ApiComponent. # noqa: E501 - - - :return: The id of this ApiComponent. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this ApiComponent. - - - :param id: The id of this ApiComponent. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def created_at(self): - """Gets the created_at of this ApiComponent. # noqa: E501 - - - :return: The created_at of this ApiComponent. # noqa: E501 - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at): - """Sets the created_at of this ApiComponent. - - - :param created_at: The created_at of this ApiComponent. # noqa: E501 - :type: datetime - """ - - self._created_at = created_at - - @property - def name(self): - """Gets the name of this ApiComponent. # noqa: E501 - - - :return: The name of this ApiComponent. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiComponent. - - - :param name: The name of this ApiComponent. # noqa: E501 - :type: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self): - """Gets the description of this ApiComponent. # noqa: E501 - - - :return: The description of this ApiComponent. # noqa: E501 - :rtype: str - """ - return self._description - - @description.setter - def description(self, description): - """Sets the description of this ApiComponent. - - - :param description: The description of this ApiComponent. # noqa: E501 - :type: str - """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 - - self._description = description - - @property - def featured(self): - """Gets the featured of this ApiComponent. # noqa: E501 - - - :return: The featured of this ApiComponent. # noqa: E501 - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured): - """Sets the featured of this ApiComponent. - - - :param featured: The featured of this ApiComponent. # noqa: E501 - :type: bool - """ - - self._featured = featured - - @property - def publish_approved(self): - """Gets the publish_approved of this ApiComponent. # noqa: E501 - - - :return: The publish_approved of this ApiComponent. # noqa: E501 - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved): - """Sets the publish_approved of this ApiComponent. - - - :param publish_approved: The publish_approved of this ApiComponent. # noqa: E501 - :type: bool - """ - - self._publish_approved = publish_approved - - @property - def related_assets(self): - """Gets the related_assets of this ApiComponent. # noqa: E501 - - - :return: The related_assets of this ApiComponent. # noqa: E501 - :rtype: list[str] - """ - return self._related_assets - - @related_assets.setter - def related_assets(self, related_assets): - """Sets the related_assets of this ApiComponent. - - - :param related_assets: The related_assets of this ApiComponent. # noqa: E501 - :type: list[str] - """ - - self._related_assets = related_assets - - @property - def filter_categories(self): - """Gets the filter_categories of this ApiComponent. # noqa: E501 - - - :return: The filter_categories of this ApiComponent. # noqa: E501 - :rtype: dict(str, str) - """ - return self._filter_categories - - @filter_categories.setter - def filter_categories(self, filter_categories): - """Sets the filter_categories of this ApiComponent. - - - :param filter_categories: The filter_categories of this ApiComponent. # noqa: E501 - :type: dict(str, str) - """ - - self._filter_categories = filter_categories - - @property - def metadata(self): - """Gets the metadata of this ApiComponent. # noqa: E501 - - - :return: The metadata of this ApiComponent. # noqa: E501 - :rtype: ApiMetadata - """ - return self._metadata - - @metadata.setter - def metadata(self, metadata): - """Sets the metadata of this ApiComponent. - - - :param metadata: The metadata of this ApiComponent. # noqa: E501 - :type: ApiMetadata - """ - - self._metadata = metadata - - @property - def parameters(self): - """Gets the parameters of this ApiComponent. # noqa: E501 - - - :return: The parameters of this ApiComponent. # noqa: E501 - :rtype: list[ApiParameter] - """ - return self._parameters - - @parameters.setter - def parameters(self, parameters): - """Sets the parameters of this ApiComponent. - - - :param parameters: The parameters of this ApiComponent. # noqa: E501 - :type: list[ApiParameter] - """ - - self._parameters = parameters - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiComponent, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiComponent): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_credential.py b/api/client/swagger_client/models/api_credential.py deleted file mode 100644 index 6586383f..00000000 --- a/api/client/swagger_client/models/api_credential.py +++ /dev/null @@ -1,254 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiCredential(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'id': 'str', - 'created_at': 'datetime', - 'pipeline_id': 'str', - 'project_id': 'str', - 'api_key': 'str', - 'data_assets': 'list[str]' - } - - attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'pipeline_id': 'pipeline_id', - 'project_id': 'project_id', - 'api_key': 'api_key', - 'data_assets': 'data_assets' - } - - def __init__(self, id=None, created_at=None, pipeline_id=None, project_id=None, api_key=None, data_assets=None): # noqa: E501 - """ApiCredential - a model defined in Swagger""" # noqa: E501 - - self._id = None - self._created_at = None - self._pipeline_id = None - self._project_id = None - self._api_key = None - self._data_assets = None - self.discriminator = None - - if id is not None: - self.id = id - if created_at is not None: - self.created_at = created_at - self.pipeline_id = pipeline_id - self.project_id = project_id - if api_key is not None: - self.api_key = api_key - if data_assets is not None: - self.data_assets = data_assets - - @property - def id(self): - """Gets the id of this ApiCredential. # noqa: E501 - - - :return: The id of this ApiCredential. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this ApiCredential. - - - :param id: The id of this ApiCredential. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def created_at(self): - """Gets the created_at of this ApiCredential. # noqa: E501 - - - :return: The created_at of this ApiCredential. # noqa: E501 - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at): - """Sets the created_at of this ApiCredential. - - - :param created_at: The created_at of this ApiCredential. # noqa: E501 - :type: datetime - """ - - self._created_at = created_at - - @property - def pipeline_id(self): - """Gets the pipeline_id of this ApiCredential. # noqa: E501 - - - :return: The pipeline_id of this ApiCredential. # noqa: E501 - :rtype: str - """ - return self._pipeline_id - - @pipeline_id.setter - def pipeline_id(self, pipeline_id): - """Sets the pipeline_id of this ApiCredential. - - - :param pipeline_id: The pipeline_id of this ApiCredential. # noqa: E501 - :type: str - """ - if pipeline_id is None: - raise ValueError("Invalid value for `pipeline_id`, must not be `None`") # noqa: E501 - - self._pipeline_id = pipeline_id - - @property - def project_id(self): - """Gets the project_id of this ApiCredential. # noqa: E501 - - - :return: The project_id of this ApiCredential. # noqa: E501 - :rtype: str - """ - return self._project_id - - @project_id.setter - def project_id(self, project_id): - """Sets the project_id of this ApiCredential. - - - :param project_id: The project_id of this ApiCredential. # noqa: E501 - :type: str - """ - if project_id is None: - raise ValueError("Invalid value for `project_id`, must not be `None`") # noqa: E501 - - self._project_id = project_id - - @property - def api_key(self): - """Gets the api_key of this ApiCredential. # noqa: E501 - - TODO: what is the api_key # noqa: E501 - - :return: The api_key of this ApiCredential. # noqa: E501 - :rtype: str - """ - return self._api_key - - @api_key.setter - def api_key(self, api_key): - """Sets the api_key of this ApiCredential. - - TODO: what is the api_key # noqa: E501 - - :param api_key: The api_key of this ApiCredential. # noqa: E501 - :type: str - """ - - self._api_key = api_key - - @property - def data_assets(self): - """Gets the data_assets of this ApiCredential. # noqa: E501 - - List of data asset IDs # noqa: E501 - - :return: The data_assets of this ApiCredential. # noqa: E501 - :rtype: list[str] - """ - return self._data_assets - - @data_assets.setter - def data_assets(self, data_assets): - """Sets the data_assets of this ApiCredential. - - List of data asset IDs # noqa: E501 - - :param data_assets: The data_assets of this ApiCredential. # noqa: E501 - :type: list[str] - """ - - self._data_assets = data_assets - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiCredential, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiCredential): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_dataset.py b/api/client/swagger_client/models/api_dataset.py deleted file mode 100644 index 71e73383..00000000 --- a/api/client/swagger_client/models/api_dataset.py +++ /dev/null @@ -1,459 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 -import six - -from swagger_client.models.api_asset import ApiAsset - - -class ApiDataset(ApiAsset): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'id': 'str', - 'created_at': 'datetime', - 'name': 'str', - 'description': 'str', - 'featured': 'bool', - 'publish_approved': 'bool', - 'related_assets': 'list[str]', - 'filter_categories': 'dict(str, str)', - 'domain': 'str', - 'format': 'str', - 'size': 'str', - 'number_of_records': 'int', - 'license': 'str', - 'metadata': 'ApiMetadata' - } - - attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'featured': 'featured', - 'publish_approved': 'publish_approved', - 'related_assets': 'related_assets', - 'filter_categories': 'filter_categories', - 'domain': 'domain', - 'format': 'format', - 'size': 'size', - 'number_of_records': 'number_of_records', - 'license': 'license', - 'metadata': 'metadata' - } - - def __init__(self, id=None, created_at=None, name=None, description=None, featured=None, publish_approved=None, related_assets=None, filter_categories=None, domain=None, format=None, size=None, number_of_records=None, license=None, metadata=None): # noqa: E501 - """ApiDataset - a model defined in Swagger""" # noqa: E501 - - self._id = None - self._created_at = None - self._name = None - self._description = None - self._featured = None - self._publish_approved = None - self._related_assets = None - self._filter_categories = None - self._domain = None - self._format = None - self._size = None - self._number_of_records = None - self._license = None - self._metadata = None - self.discriminator = None - - if id is not None: - self.id = id - if created_at is not None: - self.created_at = created_at - self.name = name - self.description = description - if featured is not None: - self.featured = featured - if publish_approved is not None: - self.publish_approved = publish_approved - if related_assets is not None: - self.related_assets = related_assets - if filter_categories is not None: - self.filter_categories = filter_categories - if domain is not None: - self.domain = domain - if format is not None: - self.format = format - if size is not None: - self.size = size - if number_of_records is not None: - self.number_of_records = number_of_records - if license is not None: - self.license = license - if metadata is not None: - self.metadata = metadata - - @property - def id(self): - """Gets the id of this ApiDataset. # noqa: E501 - - - :return: The id of this ApiDataset. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this ApiDataset. - - - :param id: The id of this ApiDataset. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def created_at(self): - """Gets the created_at of this ApiDataset. # noqa: E501 - - - :return: The created_at of this ApiDataset. # noqa: E501 - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at): - """Sets the created_at of this ApiDataset. - - - :param created_at: The created_at of this ApiDataset. # noqa: E501 - :type: datetime - """ - - self._created_at = created_at - - @property - def name(self): - """Gets the name of this ApiDataset. # noqa: E501 - - - :return: The name of this ApiDataset. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiDataset. - - - :param name: The name of this ApiDataset. # noqa: E501 - :type: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self): - """Gets the description of this ApiDataset. # noqa: E501 - - - :return: The description of this ApiDataset. # noqa: E501 - :rtype: str - """ - return self._description - - @description.setter - def description(self, description): - """Sets the description of this ApiDataset. - - - :param description: The description of this ApiDataset. # noqa: E501 - :type: str - """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 - - self._description = description - - @property - def featured(self): - """Gets the featured of this ApiDataset. # noqa: E501 - - - :return: The featured of this ApiDataset. # noqa: E501 - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured): - """Sets the featured of this ApiDataset. - - - :param featured: The featured of this ApiDataset. # noqa: E501 - :type: bool - """ - - self._featured = featured - - @property - def publish_approved(self): - """Gets the publish_approved of this ApiDataset. # noqa: E501 - - - :return: The publish_approved of this ApiDataset. # noqa: E501 - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved): - """Sets the publish_approved of this ApiDataset. - - - :param publish_approved: The publish_approved of this ApiDataset. # noqa: E501 - :type: bool - """ - - self._publish_approved = publish_approved - - @property - def related_assets(self): - """Gets the related_assets of this ApiDataset. # noqa: E501 - - - :return: The related_assets of this ApiDataset. # noqa: E501 - :rtype: list[str] - """ - return self._related_assets - - @related_assets.setter - def related_assets(self, related_assets): - """Sets the related_assets of this ApiDataset. - - - :param related_assets: The related_assets of this ApiDataset. # noqa: E501 - :type: list[str] - """ - - self._related_assets = related_assets - - @property - def filter_categories(self): - """Gets the filter_categories of this ApiDataset. # noqa: E501 - - - :return: The filter_categories of this ApiDataset. # noqa: E501 - :rtype: dict(str, str) - """ - return self._filter_categories - - @filter_categories.setter - def filter_categories(self, filter_categories): - """Sets the filter_categories of this ApiDataset. - - - :param filter_categories: The filter_categories of this ApiDataset. # noqa: E501 - :type: dict(str, str) - """ - - self._filter_categories = filter_categories - - @property - def domain(self): - """Gets the domain of this ApiDataset. # noqa: E501 - - - :return: The domain of this ApiDataset. # noqa: E501 - :rtype: str - """ - return self._domain - - @domain.setter - def domain(self, domain): - """Sets the domain of this ApiDataset. - - - :param domain: The domain of this ApiDataset. # noqa: E501 - :type: str - """ - - self._domain = domain - - @property - def format(self): - """Gets the format of this ApiDataset. # noqa: E501 - - - :return: The format of this ApiDataset. # noqa: E501 - :rtype: str - """ - return self._format - - @format.setter - def format(self, format): - """Sets the format of this ApiDataset. - - - :param format: The format of this ApiDataset. # noqa: E501 - :type: str - """ - - self._format = format - - @property - def size(self): - """Gets the size of this ApiDataset. # noqa: E501 - - - :return: The size of this ApiDataset. # noqa: E501 - :rtype: str - """ - return self._size - - @size.setter - def size(self, size): - """Sets the size of this ApiDataset. - - - :param size: The size of this ApiDataset. # noqa: E501 - :type: str - """ - - self._size = size - - @property - def number_of_records(self): - """Gets the number_of_records of this ApiDataset. # noqa: E501 - - - :return: The number_of_records of this ApiDataset. # noqa: E501 - :rtype: int - """ - return self._number_of_records - - @number_of_records.setter - def number_of_records(self, number_of_records): - """Sets the number_of_records of this ApiDataset. - - - :param number_of_records: The number_of_records of this ApiDataset. # noqa: E501 - :type: int - """ - - self._number_of_records = number_of_records - - @property - def license(self): - """Gets the license of this ApiDataset. # noqa: E501 - - - :return: The license of this ApiDataset. # noqa: E501 - :rtype: str - """ - return self._license - - @license.setter - def license(self, license): - """Sets the license of this ApiDataset. - - - :param license: The license of this ApiDataset. # noqa: E501 - :type: str - """ - - self._license = license - - @property - def metadata(self): - """Gets the metadata of this ApiDataset. # noqa: E501 - - - :return: The metadata of this ApiDataset. # noqa: E501 - :rtype: ApiMetadata - """ - return self._metadata - - @metadata.setter - def metadata(self, metadata): - """Sets the metadata of this ApiDataset. - - - :param metadata: The metadata of this ApiDataset. # noqa: E501 - :type: ApiMetadata - """ - - self._metadata = metadata - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiDataset, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiDataset): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_generate_code_response.py b/api/client/swagger_client/models/api_generate_code_response.py deleted file mode 100644 index a3728407..00000000 --- a/api/client/swagger_client/models/api_generate_code_response.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiGenerateCodeResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'script': 'str' - } - - attribute_map = { - 'script': 'script' - } - - def __init__(self, script=None): # noqa: E501 - """ApiGenerateCodeResponse - a model defined in Swagger""" # noqa: E501 - - self._script = None - self.discriminator = None - - if script is not None: - self.script = script - - @property - def script(self): - """Gets the script of this ApiGenerateCodeResponse. # noqa: E501 - - The script source code to run the component in a pipeline # noqa: E501 - - :return: The script of this ApiGenerateCodeResponse. # noqa: E501 - :rtype: str - """ - return self._script - - @script.setter - def script(self, script): - """Sets the script of this ApiGenerateCodeResponse. - - The script source code to run the component in a pipeline # noqa: E501 - - :param script: The script of this ApiGenerateCodeResponse. # noqa: E501 - :type: str - """ - - self._script = script - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiGenerateCodeResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiGenerateCodeResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_generate_model_code_response.py b/api/client/swagger_client/models/api_generate_model_code_response.py deleted file mode 100644 index 787571ab..00000000 --- a/api/client/swagger_client/models/api_generate_model_code_response.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_model_script import ApiModelScript # noqa: F401,E501 - - -class ApiGenerateModelCodeResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'scripts': 'list[ApiModelScript]' - } - - attribute_map = { - 'scripts': 'scripts' - } - - def __init__(self, scripts=None): # noqa: E501 - """ApiGenerateModelCodeResponse - a model defined in Swagger""" # noqa: E501 - - self._scripts = None - self.discriminator = None - - if scripts is not None: - self.scripts = scripts - - @property - def scripts(self): - """Gets the scripts of this ApiGenerateModelCodeResponse. # noqa: E501 - - The source code samples to use the model in a pipeline # noqa: E501 - - :return: The scripts of this ApiGenerateModelCodeResponse. # noqa: E501 - :rtype: list[ApiModelScript] - """ - return self._scripts - - @scripts.setter - def scripts(self, scripts): - """Sets the scripts of this ApiGenerateModelCodeResponse. - - The source code samples to use the model in a pipeline # noqa: E501 - - :param scripts: The scripts of this ApiGenerateModelCodeResponse. # noqa: E501 - :type: list[ApiModelScript] - """ - - self._scripts = scripts - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiGenerateModelCodeResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiGenerateModelCodeResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_get_template_response.py b/api/client/swagger_client/models/api_get_template_response.py deleted file mode 100644 index b0418a9d..00000000 --- a/api/client/swagger_client/models/api_get_template_response.py +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiGetTemplateResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'template': 'str', - 'url': 'str' - } - - attribute_map = { - 'template': 'template', - 'url': 'url' - } - - def __init__(self, template=None, url=None): # noqa: E501 - """ApiGetTemplateResponse - a model defined in Swagger""" # noqa: E501 - - self._template = None - self._url = None - self.discriminator = None - - if template is not None: - self.template = template - if url is not None: - self.url = url - - @property - def template(self): - """Gets the template of this ApiGetTemplateResponse. # noqa: E501 - - The YAML template file content # noqa: E501 - - :return: The template of this ApiGetTemplateResponse. # noqa: E501 - :rtype: str - """ - return self._template - - @template.setter - def template(self, template): - """Sets the template of this ApiGetTemplateResponse. - - The YAML template file content # noqa: E501 - - :param template: The template of this ApiGetTemplateResponse. # noqa: E501 - :type: str - """ - - self._template = template - - @property - def url(self): - """Gets the url of this ApiGetTemplateResponse. # noqa: E501 - - The URL to download the template text from S3 storage (Minio) # noqa: E501 - - :return: The url of this ApiGetTemplateResponse. # noqa: E501 - :rtype: str - """ - return self._url - - @url.setter - def url(self, url): - """Sets the url of this ApiGetTemplateResponse. - - The URL to download the template text from S3 storage (Minio) # noqa: E501 - - :param url: The url of this ApiGetTemplateResponse. # noqa: E501 - :type: str - """ - - self._url = url - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiGetTemplateResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiGetTemplateResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_inferenceservice.py b/api/client/swagger_client/models/api_inferenceservice.py deleted file mode 100644 index f1c25172..00000000 --- a/api/client/swagger_client/models/api_inferenceservice.py +++ /dev/null @@ -1,200 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.any_value import AnyValue # noqa: F401,E501 - - -class ApiInferenceservice(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'api_version': 'str', - 'kind': 'str', - 'metadata': 'AnyValue', - 'spec': 'AnyValue' - } - - attribute_map = { - 'api_version': 'apiVersion', - 'kind': 'kind', - 'metadata': 'metadata', - 'spec': 'spec' - } - - def __init__(self, api_version=None, kind=None, metadata=None, spec=None): # noqa: E501 - """ApiInferenceservice - a model defined in Swagger""" # noqa: E501 - - self._api_version = None - self._kind = None - self._metadata = None - self._spec = None - self.discriminator = None - - self.api_version = api_version - self.kind = kind - if metadata is not None: - self.metadata = metadata - if spec is not None: - self.spec = spec - - @property - def api_version(self): - """Gets the api_version of this ApiInferenceservice. # noqa: E501 - - - :return: The api_version of this ApiInferenceservice. # noqa: E501 - :rtype: str - """ - return self._api_version - - @api_version.setter - def api_version(self, api_version): - """Sets the api_version of this ApiInferenceservice. - - - :param api_version: The api_version of this ApiInferenceservice. # noqa: E501 - :type: str - """ - if api_version is None: - raise ValueError("Invalid value for `api_version`, must not be `None`") # noqa: E501 - - self._api_version = api_version - - @property - def kind(self): - """Gets the kind of this ApiInferenceservice. # noqa: E501 - - - :return: The kind of this ApiInferenceservice. # noqa: E501 - :rtype: str - """ - return self._kind - - @kind.setter - def kind(self, kind): - """Sets the kind of this ApiInferenceservice. - - - :param kind: The kind of this ApiInferenceservice. # noqa: E501 - :type: str - """ - if kind is None: - raise ValueError("Invalid value for `kind`, must not be `None`") # noqa: E501 - - self._kind = kind - - @property - def metadata(self): - """Gets the metadata of this ApiInferenceservice. # noqa: E501 - - - :return: The metadata of this ApiInferenceservice. # noqa: E501 - :rtype: AnyValue - """ - return self._metadata - - @metadata.setter - def metadata(self, metadata): - """Sets the metadata of this ApiInferenceservice. - - - :param metadata: The metadata of this ApiInferenceservice. # noqa: E501 - :type: AnyValue - """ - - self._metadata = metadata - - @property - def spec(self): - """Gets the spec of this ApiInferenceservice. # noqa: E501 - - - :return: The spec of this ApiInferenceservice. # noqa: E501 - :rtype: AnyValue - """ - return self._spec - - @spec.setter - def spec(self, spec): - """Sets the spec of this ApiInferenceservice. - - - :param spec: The spec of this ApiInferenceservice. # noqa: E501 - :type: AnyValue - """ - - self._spec = spec - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiInferenceservice, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiInferenceservice): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_list_catalog_items_response.py b/api/client/swagger_client/models/api_list_catalog_items_response.py deleted file mode 100644 index 8296f422..00000000 --- a/api/client/swagger_client/models/api_list_catalog_items_response.py +++ /dev/null @@ -1,274 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiListCatalogItemsResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'components': 'list[ApiComponent]', - 'datasets': 'list[ApiDataset]', - 'models': 'list[ApiModel]', - 'notebooks': 'list[ApiNotebook]', - 'pipelines': 'list[ApiPipeline]', - 'total_size': 'int', - 'next_page_token': 'str' - } - - attribute_map = { - 'components': 'components', - 'datasets': 'datasets', - 'models': 'models', - 'notebooks': 'notebooks', - 'pipelines': 'pipelines', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - def __init__(self, components=None, datasets=None, models=None, notebooks=None, pipelines=None, total_size=None, next_page_token=None): # noqa: E501 - """ApiListCatalogItemsResponse - a model defined in Swagger""" # noqa: E501 - - self._components = None - self._datasets = None - self._models = None - self._notebooks = None - self._pipelines = None - self._total_size = None - self._next_page_token = None - self.discriminator = None - - if components is not None: - self.components = components - if datasets is not None: - self.datasets = datasets - if models is not None: - self.models = models - if notebooks is not None: - self.notebooks = notebooks - if pipelines is not None: - self.pipelines = pipelines - if total_size is not None: - self.total_size = total_size - if next_page_token is not None: - self.next_page_token = next_page_token - - @property - def components(self): - """Gets the components of this ApiListCatalogItemsResponse. # noqa: E501 - - - :return: The components of this ApiListCatalogItemsResponse. # noqa: E501 - :rtype: list[ApiComponent] - """ - return self._components - - @components.setter - def components(self, components): - """Sets the components of this ApiListCatalogItemsResponse. - - - :param components: The components of this ApiListCatalogItemsResponse. # noqa: E501 - :type: list[ApiComponent] - """ - - self._components = components - - @property - def datasets(self): - """Gets the datasets of this ApiListCatalogItemsResponse. # noqa: E501 - - - :return: The datasets of this ApiListCatalogItemsResponse. # noqa: E501 - :rtype: list[ApiDataset] - """ - return self._datasets - - @datasets.setter - def datasets(self, datasets): - """Sets the datasets of this ApiListCatalogItemsResponse. - - - :param datasets: The datasets of this ApiListCatalogItemsResponse. # noqa: E501 - :type: list[ApiDataset] - """ - - self._datasets = datasets - - @property - def models(self): - """Gets the models of this ApiListCatalogItemsResponse. # noqa: E501 - - - :return: The models of this ApiListCatalogItemsResponse. # noqa: E501 - :rtype: list[ApiModel] - """ - return self._models - - @models.setter - def models(self, models): - """Sets the models of this ApiListCatalogItemsResponse. - - - :param models: The models of this ApiListCatalogItemsResponse. # noqa: E501 - :type: list[ApiModel] - """ - - self._models = models - - @property - def notebooks(self): - """Gets the notebooks of this ApiListCatalogItemsResponse. # noqa: E501 - - - :return: The notebooks of this ApiListCatalogItemsResponse. # noqa: E501 - :rtype: list[ApiNotebook] - """ - return self._notebooks - - @notebooks.setter - def notebooks(self, notebooks): - """Sets the notebooks of this ApiListCatalogItemsResponse. - - - :param notebooks: The notebooks of this ApiListCatalogItemsResponse. # noqa: E501 - :type: list[ApiNotebook] - """ - - self._notebooks = notebooks - - @property - def pipelines(self): - """Gets the pipelines of this ApiListCatalogItemsResponse. # noqa: E501 - - - :return: The pipelines of this ApiListCatalogItemsResponse. # noqa: E501 - :rtype: list[ApiPipeline] - """ - return self._pipelines - - @pipelines.setter - def pipelines(self, pipelines): - """Sets the pipelines of this ApiListCatalogItemsResponse. - - - :param pipelines: The pipelines of this ApiListCatalogItemsResponse. # noqa: E501 - :type: list[ApiPipeline] - """ - - self._pipelines = pipelines - - @property - def total_size(self): - """Gets the total_size of this ApiListCatalogItemsResponse. # noqa: E501 - - - :return: The total_size of this ApiListCatalogItemsResponse. # noqa: E501 - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size): - """Sets the total_size of this ApiListCatalogItemsResponse. - - - :param total_size: The total_size of this ApiListCatalogItemsResponse. # noqa: E501 - :type: int - """ - - self._total_size = total_size - - @property - def next_page_token(self): - """Gets the next_page_token of this ApiListCatalogItemsResponse. # noqa: E501 - - - :return: The next_page_token of this ApiListCatalogItemsResponse. # noqa: E501 - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token): - """Sets the next_page_token of this ApiListCatalogItemsResponse. - - - :param next_page_token: The next_page_token of this ApiListCatalogItemsResponse. # noqa: E501 - :type: str - """ - - self._next_page_token = next_page_token - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiListCatalogItemsResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiListCatalogItemsResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_list_catalog_upload_errors.py b/api/client/swagger_client/models/api_list_catalog_upload_errors.py deleted file mode 100644 index f434defe..00000000 --- a/api/client/swagger_client/models/api_list_catalog_upload_errors.py +++ /dev/null @@ -1,144 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiListCatalogUploadErrors(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'errors': 'list[ApiCatalogUploadError]', - 'total_errors': 'int' - } - - attribute_map = { - 'errors': 'errors', - 'total_errors': 'total_errors' - } - - def __init__(self, errors=None, total_errors=None): # noqa: E501 - """ApiListCatalogUploadErrors - a model defined in Swagger""" # noqa: E501 - - self._errors = None - self._total_errors = None - self.discriminator = None - - if errors is not None: - self.errors = errors - if total_errors is not None: - self.total_errors = total_errors - - @property - def errors(self): - """Gets the errors of this ApiListCatalogUploadErrors. # noqa: E501 - - - :return: The errors of this ApiListCatalogUploadErrors. # noqa: E501 - :rtype: list[ApiCatalogUploadError] - """ - return self._errors - - @errors.setter - def errors(self, errors): - """Sets the errors of this ApiListCatalogUploadErrors. - - - :param errors: The errors of this ApiListCatalogUploadErrors. # noqa: E501 - :type: list[ApiCatalogUploadError] - """ - - self._errors = errors - - @property - def total_errors(self): - """Gets the total_errors of this ApiListCatalogUploadErrors. # noqa: E501 - - - :return: The total_errors of this ApiListCatalogUploadErrors. # noqa: E501 - :rtype: int - """ - return self._total_errors - - @total_errors.setter - def total_errors(self, total_errors): - """Sets the total_errors of this ApiListCatalogUploadErrors. - - - :param total_errors: The total_errors of this ApiListCatalogUploadErrors. # noqa: E501 - :type: int - """ - - self._total_errors = total_errors - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiListCatalogUploadErrors, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiListCatalogUploadErrors): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_list_components_response.py b/api/client/swagger_client/models/api_list_components_response.py deleted file mode 100644 index c1d0085d..00000000 --- a/api/client/swagger_client/models/api_list_components_response.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_component import ApiComponent # noqa: F401,E501 - - -class ApiListComponentsResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'components': 'list[ApiComponent]', - 'total_size': 'int', - 'next_page_token': 'str' - } - - attribute_map = { - 'components': 'components', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - def __init__(self, components=None, total_size=None, next_page_token=None): # noqa: E501 - """ApiListComponentsResponse - a model defined in Swagger""" # noqa: E501 - - self._components = None - self._total_size = None - self._next_page_token = None - self.discriminator = None - - if components is not None: - self.components = components - if total_size is not None: - self.total_size = total_size - if next_page_token is not None: - self.next_page_token = next_page_token - - @property - def components(self): - """Gets the components of this ApiListComponentsResponse. # noqa: E501 - - - :return: The components of this ApiListComponentsResponse. # noqa: E501 - :rtype: list[ApiComponent] - """ - return self._components - - @components.setter - def components(self, components): - """Sets the components of this ApiListComponentsResponse. - - - :param components: The components of this ApiListComponentsResponse. # noqa: E501 - :type: list[ApiComponent] - """ - - self._components = components - - @property - def total_size(self): - """Gets the total_size of this ApiListComponentsResponse. # noqa: E501 - - - :return: The total_size of this ApiListComponentsResponse. # noqa: E501 - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size): - """Sets the total_size of this ApiListComponentsResponse. - - - :param total_size: The total_size of this ApiListComponentsResponse. # noqa: E501 - :type: int - """ - - self._total_size = total_size - - @property - def next_page_token(self): - """Gets the next_page_token of this ApiListComponentsResponse. # noqa: E501 - - - :return: The next_page_token of this ApiListComponentsResponse. # noqa: E501 - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token): - """Sets the next_page_token of this ApiListComponentsResponse. - - - :param next_page_token: The next_page_token of this ApiListComponentsResponse. # noqa: E501 - :type: str - """ - - self._next_page_token = next_page_token - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiListComponentsResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiListComponentsResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_list_credentials_response.py b/api/client/swagger_client/models/api_list_credentials_response.py deleted file mode 100644 index edca354f..00000000 --- a/api/client/swagger_client/models/api_list_credentials_response.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_credential import ApiCredential # noqa: F401,E501 - - -class ApiListCredentialsResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'credentials': 'list[ApiCredential]', - 'total_size': 'int', - 'next_page_token': 'str' - } - - attribute_map = { - 'credentials': 'credentials', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - def __init__(self, credentials=None, total_size=None, next_page_token=None): # noqa: E501 - """ApiListCredentialsResponse - a model defined in Swagger""" # noqa: E501 - - self._credentials = None - self._total_size = None - self._next_page_token = None - self.discriminator = None - - if credentials is not None: - self.credentials = credentials - if total_size is not None: - self.total_size = total_size - if next_page_token is not None: - self.next_page_token = next_page_token - - @property - def credentials(self): - """Gets the credentials of this ApiListCredentialsResponse. # noqa: E501 - - - :return: The credentials of this ApiListCredentialsResponse. # noqa: E501 - :rtype: list[ApiCredential] - """ - return self._credentials - - @credentials.setter - def credentials(self, credentials): - """Sets the credentials of this ApiListCredentialsResponse. - - - :param credentials: The credentials of this ApiListCredentialsResponse. # noqa: E501 - :type: list[ApiCredential] - """ - - self._credentials = credentials - - @property - def total_size(self): - """Gets the total_size of this ApiListCredentialsResponse. # noqa: E501 - - - :return: The total_size of this ApiListCredentialsResponse. # noqa: E501 - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size): - """Sets the total_size of this ApiListCredentialsResponse. - - - :param total_size: The total_size of this ApiListCredentialsResponse. # noqa: E501 - :type: int - """ - - self._total_size = total_size - - @property - def next_page_token(self): - """Gets the next_page_token of this ApiListCredentialsResponse. # noqa: E501 - - - :return: The next_page_token of this ApiListCredentialsResponse. # noqa: E501 - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token): - """Sets the next_page_token of this ApiListCredentialsResponse. - - - :param next_page_token: The next_page_token of this ApiListCredentialsResponse. # noqa: E501 - :type: str - """ - - self._next_page_token = next_page_token - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiListCredentialsResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiListCredentialsResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_list_datasets_response.py b/api/client/swagger_client/models/api_list_datasets_response.py deleted file mode 100644 index 7f94a35b..00000000 --- a/api/client/swagger_client/models/api_list_datasets_response.py +++ /dev/null @@ -1,170 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiListDatasetsResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'datasets': 'list[ApiDataset]', - 'total_size': 'int', - 'next_page_token': 'str' - } - - attribute_map = { - 'datasets': 'datasets', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - def __init__(self, datasets=None, total_size=None, next_page_token=None): # noqa: E501 - """ApiListDatasetsResponse - a model defined in Swagger""" # noqa: E501 - - self._datasets = None - self._total_size = None - self._next_page_token = None - self.discriminator = None - - if datasets is not None: - self.datasets = datasets - if total_size is not None: - self.total_size = total_size - if next_page_token is not None: - self.next_page_token = next_page_token - - @property - def datasets(self): - """Gets the datasets of this ApiListDatasetsResponse. # noqa: E501 - - - :return: The datasets of this ApiListDatasetsResponse. # noqa: E501 - :rtype: list[ApiDataset] - """ - return self._datasets - - @datasets.setter - def datasets(self, datasets): - """Sets the datasets of this ApiListDatasetsResponse. - - - :param datasets: The datasets of this ApiListDatasetsResponse. # noqa: E501 - :type: list[ApiDataset] - """ - - self._datasets = datasets - - @property - def total_size(self): - """Gets the total_size of this ApiListDatasetsResponse. # noqa: E501 - - - :return: The total_size of this ApiListDatasetsResponse. # noqa: E501 - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size): - """Sets the total_size of this ApiListDatasetsResponse. - - - :param total_size: The total_size of this ApiListDatasetsResponse. # noqa: E501 - :type: int - """ - - self._total_size = total_size - - @property - def next_page_token(self): - """Gets the next_page_token of this ApiListDatasetsResponse. # noqa: E501 - - - :return: The next_page_token of this ApiListDatasetsResponse. # noqa: E501 - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token): - """Sets the next_page_token of this ApiListDatasetsResponse. - - - :param next_page_token: The next_page_token of this ApiListDatasetsResponse. # noqa: E501 - :type: str - """ - - self._next_page_token = next_page_token - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiListDatasetsResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiListDatasetsResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_list_inferenceservices_response.py b/api/client/swagger_client/models/api_list_inferenceservices_response.py deleted file mode 100644 index 9d70b760..00000000 --- a/api/client/swagger_client/models/api_list_inferenceservices_response.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_inferenceservice import ApiInferenceservice # noqa: F401,E501 - - -class ApiListInferenceservicesResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'inferenceservices': 'list[ApiInferenceservice]', - 'total_size': 'int', - 'next_page_token': 'str' - } - - attribute_map = { - 'inferenceservices': 'Inferenceservices', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - def __init__(self, inferenceservices=None, total_size=None, next_page_token=None): # noqa: E501 - """ApiListInferenceservicesResponse - a model defined in Swagger""" # noqa: E501 - - self._inferenceservices = None - self._total_size = None - self._next_page_token = None - self.discriminator = None - - if inferenceservices is not None: - self.inferenceservices = inferenceservices - if total_size is not None: - self.total_size = total_size - if next_page_token is not None: - self.next_page_token = next_page_token - - @property - def inferenceservices(self): - """Gets the inferenceservices of this ApiListInferenceservicesResponse. # noqa: E501 - - - :return: The inferenceservices of this ApiListInferenceservicesResponse. # noqa: E501 - :rtype: list[ApiInferenceservice] - """ - return self._inferenceservices - - @inferenceservices.setter - def inferenceservices(self, inferenceservices): - """Sets the inferenceservices of this ApiListInferenceservicesResponse. - - - :param inferenceservices: The inferenceservices of this ApiListInferenceservicesResponse. # noqa: E501 - :type: list[ApiInferenceservice] - """ - - self._inferenceservices = inferenceservices - - @property - def total_size(self): - """Gets the total_size of this ApiListInferenceservicesResponse. # noqa: E501 - - - :return: The total_size of this ApiListInferenceservicesResponse. # noqa: E501 - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size): - """Sets the total_size of this ApiListInferenceservicesResponse. - - - :param total_size: The total_size of this ApiListInferenceservicesResponse. # noqa: E501 - :type: int - """ - - self._total_size = total_size - - @property - def next_page_token(self): - """Gets the next_page_token of this ApiListInferenceservicesResponse. # noqa: E501 - - - :return: The next_page_token of this ApiListInferenceservicesResponse. # noqa: E501 - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token): - """Sets the next_page_token of this ApiListInferenceservicesResponse. - - - :param next_page_token: The next_page_token of this ApiListInferenceservicesResponse. # noqa: E501 - :type: str - """ - - self._next_page_token = next_page_token - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiListInferenceservicesResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiListInferenceservicesResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_list_models_response.py b/api/client/swagger_client/models/api_list_models_response.py deleted file mode 100644 index c61cf0aa..00000000 --- a/api/client/swagger_client/models/api_list_models_response.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_model import ApiModel # noqa: F401,E501 - - -class ApiListModelsResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'models': 'list[ApiModel]', - 'total_size': 'int', - 'next_page_token': 'str' - } - - attribute_map = { - 'models': 'models', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - def __init__(self, models=None, total_size=None, next_page_token=None): # noqa: E501 - """ApiListModelsResponse - a model defined in Swagger""" # noqa: E501 - - self._models = None - self._total_size = None - self._next_page_token = None - self.discriminator = None - - if models is not None: - self.models = models - if total_size is not None: - self.total_size = total_size - if next_page_token is not None: - self.next_page_token = next_page_token - - @property - def models(self): - """Gets the models of this ApiListModelsResponse. # noqa: E501 - - - :return: The models of this ApiListModelsResponse. # noqa: E501 - :rtype: list[ApiModel] - """ - return self._models - - @models.setter - def models(self, models): - """Sets the models of this ApiListModelsResponse. - - - :param models: The models of this ApiListModelsResponse. # noqa: E501 - :type: list[ApiModel] - """ - - self._models = models - - @property - def total_size(self): - """Gets the total_size of this ApiListModelsResponse. # noqa: E501 - - - :return: The total_size of this ApiListModelsResponse. # noqa: E501 - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size): - """Sets the total_size of this ApiListModelsResponse. - - - :param total_size: The total_size of this ApiListModelsResponse. # noqa: E501 - :type: int - """ - - self._total_size = total_size - - @property - def next_page_token(self): - """Gets the next_page_token of this ApiListModelsResponse. # noqa: E501 - - - :return: The next_page_token of this ApiListModelsResponse. # noqa: E501 - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token): - """Sets the next_page_token of this ApiListModelsResponse. - - - :param next_page_token: The next_page_token of this ApiListModelsResponse. # noqa: E501 - :type: str - """ - - self._next_page_token = next_page_token - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiListModelsResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiListModelsResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_list_notebooks_response.py b/api/client/swagger_client/models/api_list_notebooks_response.py deleted file mode 100644 index 3470ed7f..00000000 --- a/api/client/swagger_client/models/api_list_notebooks_response.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_notebook import ApiNotebook # noqa: F401,E501 - - -class ApiListNotebooksResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'notebooks': 'list[ApiNotebook]', - 'total_size': 'int', - 'next_page_token': 'str' - } - - attribute_map = { - 'notebooks': 'notebooks', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - def __init__(self, notebooks=None, total_size=None, next_page_token=None): # noqa: E501 - """ApiListNotebooksResponse - a model defined in Swagger""" # noqa: E501 - - self._notebooks = None - self._total_size = None - self._next_page_token = None - self.discriminator = None - - if notebooks is not None: - self.notebooks = notebooks - if total_size is not None: - self.total_size = total_size - if next_page_token is not None: - self.next_page_token = next_page_token - - @property - def notebooks(self): - """Gets the notebooks of this ApiListNotebooksResponse. # noqa: E501 - - - :return: The notebooks of this ApiListNotebooksResponse. # noqa: E501 - :rtype: list[ApiNotebook] - """ - return self._notebooks - - @notebooks.setter - def notebooks(self, notebooks): - """Sets the notebooks of this ApiListNotebooksResponse. - - - :param notebooks: The notebooks of this ApiListNotebooksResponse. # noqa: E501 - :type: list[ApiNotebook] - """ - - self._notebooks = notebooks - - @property - def total_size(self): - """Gets the total_size of this ApiListNotebooksResponse. # noqa: E501 - - - :return: The total_size of this ApiListNotebooksResponse. # noqa: E501 - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size): - """Sets the total_size of this ApiListNotebooksResponse. - - - :param total_size: The total_size of this ApiListNotebooksResponse. # noqa: E501 - :type: int - """ - - self._total_size = total_size - - @property - def next_page_token(self): - """Gets the next_page_token of this ApiListNotebooksResponse. # noqa: E501 - - - :return: The next_page_token of this ApiListNotebooksResponse. # noqa: E501 - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token): - """Sets the next_page_token of this ApiListNotebooksResponse. - - - :param next_page_token: The next_page_token of this ApiListNotebooksResponse. # noqa: E501 - :type: str - """ - - self._next_page_token = next_page_token - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiListNotebooksResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiListNotebooksResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_list_pipelines_response.py b/api/client/swagger_client/models/api_list_pipelines_response.py deleted file mode 100644 index eaa36945..00000000 --- a/api/client/swagger_client/models/api_list_pipelines_response.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_pipeline_extended import ApiPipelineExtended # noqa: F401,E501 - - -class ApiListPipelinesResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'pipelines': 'list[ApiPipelineExtended]', - 'total_size': 'int', - 'next_page_token': 'str' - } - - attribute_map = { - 'pipelines': 'pipelines', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - def __init__(self, pipelines=None, total_size=None, next_page_token=None): # noqa: E501 - """ApiListPipelinesResponse - a model defined in Swagger""" # noqa: E501 - - self._pipelines = None - self._total_size = None - self._next_page_token = None - self.discriminator = None - - if pipelines is not None: - self.pipelines = pipelines - if total_size is not None: - self.total_size = total_size - if next_page_token is not None: - self.next_page_token = next_page_token - - @property - def pipelines(self): - """Gets the pipelines of this ApiListPipelinesResponse. # noqa: E501 - - - :return: The pipelines of this ApiListPipelinesResponse. # noqa: E501 - :rtype: list[ApiPipelineExtended] - """ - return self._pipelines - - @pipelines.setter - def pipelines(self, pipelines): - """Sets the pipelines of this ApiListPipelinesResponse. - - - :param pipelines: The pipelines of this ApiListPipelinesResponse. # noqa: E501 - :type: list[ApiPipelineExtended] - """ - - self._pipelines = pipelines - - @property - def total_size(self): - """Gets the total_size of this ApiListPipelinesResponse. # noqa: E501 - - - :return: The total_size of this ApiListPipelinesResponse. # noqa: E501 - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size): - """Sets the total_size of this ApiListPipelinesResponse. - - - :param total_size: The total_size of this ApiListPipelinesResponse. # noqa: E501 - :type: int - """ - - self._total_size = total_size - - @property - def next_page_token(self): - """Gets the next_page_token of this ApiListPipelinesResponse. # noqa: E501 - - - :return: The next_page_token of this ApiListPipelinesResponse. # noqa: E501 - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token): - """Sets the next_page_token of this ApiListPipelinesResponse. - - - :param next_page_token: The next_page_token of this ApiListPipelinesResponse. # noqa: E501 - :type: str - """ - - self._next_page_token = next_page_token - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiListPipelinesResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiListPipelinesResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_metadata.py b/api/client/swagger_client/models/api_metadata.py deleted file mode 100644 index e405fba4..00000000 --- a/api/client/swagger_client/models/api_metadata.py +++ /dev/null @@ -1,170 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiMetadata(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'annotations': 'dict(str, str)', - 'labels': 'dict(str, str)', - 'tags': 'list[str]' - } - - attribute_map = { - 'annotations': 'annotations', - 'labels': 'labels', - 'tags': 'tags' - } - - def __init__(self, annotations=None, labels=None, tags=None): # noqa: E501 - """ApiMetadata - a model defined in Swagger""" # noqa: E501 - - self._annotations = None - self._labels = None - self._tags = None - self.discriminator = None - - if annotations is not None: - self.annotations = annotations - if labels is not None: - self.labels = labels - if tags is not None: - self.tags = tags - - @property - def annotations(self): - """Gets the annotations of this ApiMetadata. # noqa: E501 - - - :return: The annotations of this ApiMetadata. # noqa: E501 - :rtype: dict(str, str) - """ - return self._annotations - - @annotations.setter - def annotations(self, annotations): - """Sets the annotations of this ApiMetadata. - - - :param annotations: The annotations of this ApiMetadata. # noqa: E501 - :type: dict(str, str) - """ - - self._annotations = annotations - - @property - def labels(self): - """Gets the labels of this ApiMetadata. # noqa: E501 - - - :return: The labels of this ApiMetadata. # noqa: E501 - :rtype: dict(str, str) - """ - return self._labels - - @labels.setter - def labels(self, labels): - """Sets the labels of this ApiMetadata. - - - :param labels: The labels of this ApiMetadata. # noqa: E501 - :type: dict(str, str) - """ - - self._labels = labels - - @property - def tags(self): - """Gets the tags of this ApiMetadata. # noqa: E501 - - - :return: The tags of this ApiMetadata. # noqa: E501 - :rtype: list[str] - """ - return self._tags - - @tags.setter - def tags(self, tags): - """Sets the tags of this ApiMetadata. - - - :param tags: The tags of this ApiMetadata. # noqa: E501 - :type: list[str] - """ - - self._tags = tags - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiMetadata, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiMetadata): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_model.py b/api/client/swagger_client/models/api_model.py deleted file mode 100644 index 2d53f266..00000000 --- a/api/client/swagger_client/models/api_model.py +++ /dev/null @@ -1,592 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 -import six - -from swagger_client.models.api_asset import ApiAsset -from swagger_client.models.api_model_framework import ApiModelFramework # noqa: F401,E501 -from swagger_client.models.api_parameter import ApiParameter # noqa: F401,E501 - - -class ApiModel(ApiAsset): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'id': 'str', - 'created_at': 'datetime', - 'name': 'str', - 'description': 'str', - 'featured': 'bool', - 'publish_approved': 'bool', - 'related_assets': 'list[str]', - 'filter_categories': 'dict(str, str)', - 'domain': 'str', - 'labels': 'dict(str, str)', - 'framework': 'ApiModelFramework', - 'trainable': 'bool', - 'trainable_tested_platforms': 'list[str]', - 'trainable_credentials_required': 'bool', - 'trainable_parameters': 'list[ApiParameter]', - 'servable': 'bool', - 'servable_tested_platforms': 'list[str]', - 'servable_credentials_required': 'bool', - 'servable_parameters': 'list[ApiParameter]' - } - - attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'featured': 'featured', - 'publish_approved': 'publish_approved', - 'related_assets': 'related_assets', - 'filter_categories': 'filter_categories', - 'domain': 'domain', - 'labels': 'labels', - 'framework': 'framework', - 'trainable': 'trainable', - 'trainable_tested_platforms': 'trainable_tested_platforms', - 'trainable_credentials_required': 'trainable_credentials_required', - 'trainable_parameters': 'trainable_parameters', - 'servable': 'servable', - 'servable_tested_platforms': 'servable_tested_platforms', - 'servable_credentials_required': 'servable_credentials_required', - 'servable_parameters': 'servable_parameters' - } - - def __init__(self, id=None, created_at=None, name=None, description=None, featured=None, publish_approved=None, related_assets=None, filter_categories=None, domain=None, labels=None, framework=None, trainable=None, trainable_tested_platforms=None, trainable_credentials_required=None, trainable_parameters=None, servable=None, servable_tested_platforms=None, servable_credentials_required=None, servable_parameters=None): # noqa: E501 - """ApiModel - a model defined in Swagger""" # noqa: E501 - - self._id = None - self._created_at = None - self._name = None - self._description = None - self._featured = None - self._publish_approved = None - self._related_assets = None - self._filter_categories = None - self._domain = None - self._labels = None - self._framework = None - self._trainable = None - self._trainable_tested_platforms = None - self._trainable_credentials_required = None - self._trainable_parameters = None - self._servable = None - self._servable_tested_platforms = None - self._servable_credentials_required = None - self._servable_parameters = None - self.discriminator = None - - if id is not None: - self.id = id - if created_at is not None: - self.created_at = created_at - self.name = name - self.description = description - if featured is not None: - self.featured = featured - if publish_approved is not None: - self.publish_approved = publish_approved - if related_assets is not None: - self.related_assets = related_assets - if filter_categories is not None: - self.filter_categories = filter_categories - if domain is not None: - self.domain = domain - if labels is not None: - self.labels = labels - self.framework = framework - if trainable is not None: - self.trainable = trainable - if trainable_tested_platforms is not None: - self.trainable_tested_platforms = trainable_tested_platforms - if trainable_credentials_required is not None: - self.trainable_credentials_required = trainable_credentials_required - if trainable_parameters is not None: - self.trainable_parameters = trainable_parameters - if servable is not None: - self.servable = servable - if servable_tested_platforms is not None: - self.servable_tested_platforms = servable_tested_platforms - if servable_credentials_required is not None: - self.servable_credentials_required = servable_credentials_required - if servable_parameters is not None: - self.servable_parameters = servable_parameters - - @property - def id(self): - """Gets the id of this ApiModel. # noqa: E501 - - - :return: The id of this ApiModel. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this ApiModel. - - - :param id: The id of this ApiModel. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def created_at(self): - """Gets the created_at of this ApiModel. # noqa: E501 - - - :return: The created_at of this ApiModel. # noqa: E501 - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at): - """Sets the created_at of this ApiModel. - - - :param created_at: The created_at of this ApiModel. # noqa: E501 - :type: datetime - """ - - self._created_at = created_at - - @property - def name(self): - """Gets the name of this ApiModel. # noqa: E501 - - - :return: The name of this ApiModel. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiModel. - - - :param name: The name of this ApiModel. # noqa: E501 - :type: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self): - """Gets the description of this ApiModel. # noqa: E501 - - - :return: The description of this ApiModel. # noqa: E501 - :rtype: str - """ - return self._description - - @description.setter - def description(self, description): - """Sets the description of this ApiModel. - - - :param description: The description of this ApiModel. # noqa: E501 - :type: str - """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 - - self._description = description - - @property - def featured(self): - """Gets the featured of this ApiModel. # noqa: E501 - - - :return: The featured of this ApiModel. # noqa: E501 - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured): - """Sets the featured of this ApiModel. - - - :param featured: The featured of this ApiModel. # noqa: E501 - :type: bool - """ - - self._featured = featured - - @property - def publish_approved(self): - """Gets the publish_approved of this ApiModel. # noqa: E501 - - - :return: The publish_approved of this ApiModel. # noqa: E501 - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved): - """Sets the publish_approved of this ApiModel. - - - :param publish_approved: The publish_approved of this ApiModel. # noqa: E501 - :type: bool - """ - - self._publish_approved = publish_approved - - @property - def related_assets(self): - """Gets the related_assets of this ApiModel. # noqa: E501 - - - :return: The related_assets of this ApiModel. # noqa: E501 - :rtype: list[str] - """ - return self._related_assets - - @related_assets.setter - def related_assets(self, related_assets): - """Sets the related_assets of this ApiModel. - - - :param related_assets: The related_assets of this ApiModel. # noqa: E501 - :type: list[str] - """ - - self._related_assets = related_assets - - @property - def filter_categories(self): - """Gets the filter_categories of this ApiModel. # noqa: E501 - - - :return: The filter_categories of this ApiModel. # noqa: E501 - :rtype: dict(str, str) - """ - return self._filter_categories - - @filter_categories.setter - def filter_categories(self, filter_categories): - """Sets the filter_categories of this ApiModel. - - - :param filter_categories: The filter_categories of this ApiModel. # noqa: E501 - :type: dict(str, str) - """ - - self._filter_categories = filter_categories - - @property - def domain(self): - """Gets the domain of this ApiModel. # noqa: E501 - - - :return: The domain of this ApiModel. # noqa: E501 - :rtype: str - """ - return self._domain - - @domain.setter - def domain(self, domain): - """Sets the domain of this ApiModel. - - - :param domain: The domain of this ApiModel. # noqa: E501 - :type: str - """ - - self._domain = domain - - @property - def labels(self): - """Gets the labels of this ApiModel. # noqa: E501 - - - :return: The labels of this ApiModel. # noqa: E501 - :rtype: dict(str, str) - """ - return self._labels - - @labels.setter - def labels(self, labels): - """Sets the labels of this ApiModel. - - - :param labels: The labels of this ApiModel. # noqa: E501 - :type: dict(str, str) - """ - - self._labels = labels - - @property - def framework(self): - """Gets the framework of this ApiModel. # noqa: E501 - - - :return: The framework of this ApiModel. # noqa: E501 - :rtype: ApiModelFramework - """ - return self._framework - - @framework.setter - def framework(self, framework): - """Sets the framework of this ApiModel. - - - :param framework: The framework of this ApiModel. # noqa: E501 - :type: ApiModelFramework - """ - if framework is None: - raise ValueError("Invalid value for `framework`, must not be `None`") # noqa: E501 - - self._framework = framework - - @property - def trainable(self): - """Gets the trainable of this ApiModel. # noqa: E501 - - - :return: The trainable of this ApiModel. # noqa: E501 - :rtype: bool - """ - return self._trainable - - @trainable.setter - def trainable(self, trainable): - """Sets the trainable of this ApiModel. - - - :param trainable: The trainable of this ApiModel. # noqa: E501 - :type: bool - """ - - self._trainable = trainable - - @property - def trainable_tested_platforms(self): - """Gets the trainable_tested_platforms of this ApiModel. # noqa: E501 - - - :return: The trainable_tested_platforms of this ApiModel. # noqa: E501 - :rtype: list[str] - """ - return self._trainable_tested_platforms - - @trainable_tested_platforms.setter - def trainable_tested_platforms(self, trainable_tested_platforms): - """Sets the trainable_tested_platforms of this ApiModel. - - - :param trainable_tested_platforms: The trainable_tested_platforms of this ApiModel. # noqa: E501 - :type: list[str] - """ - - self._trainable_tested_platforms = trainable_tested_platforms - - @property - def trainable_credentials_required(self): - """Gets the trainable_credentials_required of this ApiModel. # noqa: E501 - - - :return: The trainable_credentials_required of this ApiModel. # noqa: E501 - :rtype: bool - """ - return self._trainable_credentials_required - - @trainable_credentials_required.setter - def trainable_credentials_required(self, trainable_credentials_required): - """Sets the trainable_credentials_required of this ApiModel. - - - :param trainable_credentials_required: The trainable_credentials_required of this ApiModel. # noqa: E501 - :type: bool - """ - - self._trainable_credentials_required = trainable_credentials_required - - @property - def trainable_parameters(self): - """Gets the trainable_parameters of this ApiModel. # noqa: E501 - - - :return: The trainable_parameters of this ApiModel. # noqa: E501 - :rtype: list[ApiParameter] - """ - return self._trainable_parameters - - @trainable_parameters.setter - def trainable_parameters(self, trainable_parameters): - """Sets the trainable_parameters of this ApiModel. - - - :param trainable_parameters: The trainable_parameters of this ApiModel. # noqa: E501 - :type: list[ApiParameter] - """ - - self._trainable_parameters = trainable_parameters - - @property - def servable(self): - """Gets the servable of this ApiModel. # noqa: E501 - - - :return: The servable of this ApiModel. # noqa: E501 - :rtype: bool - """ - return self._servable - - @servable.setter - def servable(self, servable): - """Sets the servable of this ApiModel. - - - :param servable: The servable of this ApiModel. # noqa: E501 - :type: bool - """ - - self._servable = servable - - @property - def servable_tested_platforms(self): - """Gets the servable_tested_platforms of this ApiModel. # noqa: E501 - - - :return: The servable_tested_platforms of this ApiModel. # noqa: E501 - :rtype: list[str] - """ - return self._servable_tested_platforms - - @servable_tested_platforms.setter - def servable_tested_platforms(self, servable_tested_platforms): - """Sets the servable_tested_platforms of this ApiModel. - - - :param servable_tested_platforms: The servable_tested_platforms of this ApiModel. # noqa: E501 - :type: list[str] - """ - - self._servable_tested_platforms = servable_tested_platforms - - @property - def servable_credentials_required(self): - """Gets the servable_credentials_required of this ApiModel. # noqa: E501 - - - :return: The servable_credentials_required of this ApiModel. # noqa: E501 - :rtype: bool - """ - return self._servable_credentials_required - - @servable_credentials_required.setter - def servable_credentials_required(self, servable_credentials_required): - """Sets the servable_credentials_required of this ApiModel. - - - :param servable_credentials_required: The servable_credentials_required of this ApiModel. # noqa: E501 - :type: bool - """ - - self._servable_credentials_required = servable_credentials_required - - @property - def servable_parameters(self): - """Gets the servable_parameters of this ApiModel. # noqa: E501 - - - :return: The servable_parameters of this ApiModel. # noqa: E501 - :rtype: list[ApiParameter] - """ - return self._servable_parameters - - @servable_parameters.setter - def servable_parameters(self, servable_parameters): - """Sets the servable_parameters of this ApiModel. - - - :param servable_parameters: The servable_parameters of this ApiModel. # noqa: E501 - :type: list[ApiParameter] - """ - - self._servable_parameters = servable_parameters - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiModel, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiModel): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_model_framework.py b/api/client/swagger_client/models/api_model_framework.py deleted file mode 100644 index 87eb99a9..00000000 --- a/api/client/swagger_client/models/api_model_framework.py +++ /dev/null @@ -1,173 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_model_framework_runtimes import ApiModelFrameworkRuntimes # noqa: F401,E501 - - -class ApiModelFramework(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'name': 'str', - 'version': 'str', - 'runtimes': 'ApiModelFrameworkRuntimes' - } - - attribute_map = { - 'name': 'name', - 'version': 'version', - 'runtimes': 'runtimes' - } - - def __init__(self, name=None, version=None, runtimes=None): # noqa: E501 - """ApiModelFramework - a model defined in Swagger""" # noqa: E501 - - self._name = None - self._version = None - self._runtimes = None - self.discriminator = None - - self.name = name - if version is not None: - self.version = version - if runtimes is not None: - self.runtimes = runtimes - - @property - def name(self): - """Gets the name of this ApiModelFramework. # noqa: E501 - - - :return: The name of this ApiModelFramework. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiModelFramework. - - - :param name: The name of this ApiModelFramework. # noqa: E501 - :type: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def version(self): - """Gets the version of this ApiModelFramework. # noqa: E501 - - - :return: The version of this ApiModelFramework. # noqa: E501 - :rtype: str - """ - return self._version - - @version.setter - def version(self, version): - """Sets the version of this ApiModelFramework. - - - :param version: The version of this ApiModelFramework. # noqa: E501 - :type: str - """ - - self._version = version - - @property - def runtimes(self): - """Gets the runtimes of this ApiModelFramework. # noqa: E501 - - - :return: The runtimes of this ApiModelFramework. # noqa: E501 - :rtype: ApiModelFrameworkRuntimes - """ - return self._runtimes - - @runtimes.setter - def runtimes(self, runtimes): - """Sets the runtimes of this ApiModelFramework. - - - :param runtimes: The runtimes of this ApiModelFramework. # noqa: E501 - :type: ApiModelFrameworkRuntimes - """ - - self._runtimes = runtimes - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiModelFramework, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiModelFramework): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_model_framework_runtimes.py b/api/client/swagger_client/models/api_model_framework_runtimes.py deleted file mode 100644 index db1fa331..00000000 --- a/api/client/swagger_client/models/api_model_framework_runtimes.py +++ /dev/null @@ -1,144 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiModelFrameworkRuntimes(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'name': 'str', - 'version': 'str' - } - - attribute_map = { - 'name': 'name', - 'version': 'version' - } - - def __init__(self, name=None, version=None): # noqa: E501 - """ApiModelFrameworkRuntimes - a model defined in Swagger""" # noqa: E501 - - self._name = None - self._version = None - self.discriminator = None - - if name is not None: - self.name = name - if version is not None: - self.version = version - - @property - def name(self): - """Gets the name of this ApiModelFrameworkRuntimes. # noqa: E501 - - - :return: The name of this ApiModelFrameworkRuntimes. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiModelFrameworkRuntimes. - - - :param name: The name of this ApiModelFrameworkRuntimes. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def version(self): - """Gets the version of this ApiModelFrameworkRuntimes. # noqa: E501 - - - :return: The version of this ApiModelFrameworkRuntimes. # noqa: E501 - :rtype: str - """ - return self._version - - @version.setter - def version(self, version): - """Sets the version of this ApiModelFrameworkRuntimes. - - - :param version: The version of this ApiModelFrameworkRuntimes. # noqa: E501 - :type: str - """ - - self._version = version - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiModelFrameworkRuntimes, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiModelFrameworkRuntimes): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_model_script.py b/api/client/swagger_client/models/api_model_script.py deleted file mode 100644 index d57941c9..00000000 --- a/api/client/swagger_client/models/api_model_script.py +++ /dev/null @@ -1,179 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiModelScript(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'pipeline_stage': 'str', - 'execution_platform': 'str', - 'script_code': 'str' - } - - attribute_map = { - 'pipeline_stage': 'pipeline_stage', - 'execution_platform': 'execution_platform', - 'script_code': 'script_code' - } - - def __init__(self, pipeline_stage=None, execution_platform=None, script_code=None): # noqa: E501 - """ApiModelScript - a model defined in Swagger""" # noqa: E501 - - self._pipeline_stage = None - self._execution_platform = None - self._script_code = None - self.discriminator = None - - self.pipeline_stage = pipeline_stage - self.execution_platform = execution_platform - self.script_code = script_code - - @property - def pipeline_stage(self): - """Gets the pipeline_stage of this ApiModelScript. # noqa: E501 - - pipeline stage that this code sample applies to, either 'train' or 'serve' # noqa: E501 - - :return: The pipeline_stage of this ApiModelScript. # noqa: E501 - :rtype: str - """ - return self._pipeline_stage - - @pipeline_stage.setter - def pipeline_stage(self, pipeline_stage): - """Sets the pipeline_stage of this ApiModelScript. - - pipeline stage that this code sample applies to, either 'train' or 'serve' # noqa: E501 - - :param pipeline_stage: The pipeline_stage of this ApiModelScript. # noqa: E501 - :type: str - """ - if pipeline_stage is None: - raise ValueError("Invalid value for `pipeline_stage`, must not be `None`") # noqa: E501 - - self._pipeline_stage = pipeline_stage - - @property - def execution_platform(self): - """Gets the execution_platform of this ApiModelScript. # noqa: E501 - - execution platform that this code sample applies to, i.e. 'kubernetes', 'knative' # noqa: E501 - - :return: The execution_platform of this ApiModelScript. # noqa: E501 - :rtype: str - """ - return self._execution_platform - - @execution_platform.setter - def execution_platform(self, execution_platform): - """Sets the execution_platform of this ApiModelScript. - - execution platform that this code sample applies to, i.e. 'kubernetes', 'knative' # noqa: E501 - - :param execution_platform: The execution_platform of this ApiModelScript. # noqa: E501 - :type: str - """ - if execution_platform is None: - raise ValueError("Invalid value for `execution_platform`, must not be `None`") # noqa: E501 - - self._execution_platform = execution_platform - - @property - def script_code(self): - """Gets the script_code of this ApiModelScript. # noqa: E501 - - the source code to run the model in a pipeline stage # noqa: E501 - - :return: The script_code of this ApiModelScript. # noqa: E501 - :rtype: str - """ - return self._script_code - - @script_code.setter - def script_code(self, script_code): - """Sets the script_code of this ApiModelScript. - - the source code to run the model in a pipeline stage # noqa: E501 - - :param script_code: The script_code of this ApiModelScript. # noqa: E501 - :type: str - """ - if script_code is None: - raise ValueError("Invalid value for `script_code`, must not be `None`") # noqa: E501 - - self._script_code = script_code - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiModelScript, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiModelScript): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_notebook.py b/api/client/swagger_client/models/api_notebook.py deleted file mode 100644 index 8c608ade..00000000 --- a/api/client/swagger_client/models/api_notebook.py +++ /dev/null @@ -1,386 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 -import six - -from swagger_client.models.api_asset import ApiAsset -from swagger_client.models.api_metadata import ApiMetadata # noqa: F401,E501 -from swagger_client.models.api_parameter import ApiParameter # noqa: F401,E501 - - -class ApiNotebook(ApiAsset): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'id': 'str', - 'created_at': 'datetime', - 'name': 'str', - 'description': 'str', - 'featured': 'bool', - 'publish_approved': 'bool', - 'related_assets': 'list[str]', - 'filter_categories': 'dict(str, str)', - 'url': 'str', - 'metadata': 'ApiMetadata', - 'parameters': 'list[ApiParameter]' - } - - attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'featured': 'featured', - 'publish_approved': 'publish_approved', - 'related_assets': 'related_assets', - 'filter_categories': 'filter_categories', - 'url': 'url', - 'metadata': 'metadata', - 'parameters': 'parameters' - } - - def __init__(self, id=None, created_at=None, name=None, description=None, featured=None, publish_approved=None, related_assets=None, filter_categories=None, url=None, metadata=None, parameters=None): # noqa: E501 - """ApiNotebook - a model defined in Swagger""" # noqa: E501 - - self._id = None - self._created_at = None - self._name = None - self._description = None - self._featured = None - self._publish_approved = None - self._related_assets = None - self._filter_categories = None - self._url = None - self._metadata = None - self._parameters = None - self.discriminator = None - - if id is not None: - self.id = id - if created_at is not None: - self.created_at = created_at - self.name = name - self.description = description - if featured is not None: - self.featured = featured - if publish_approved is not None: - self.publish_approved = publish_approved - if related_assets is not None: - self.related_assets = related_assets - if filter_categories is not None: - self.filter_categories = filter_categories - self.url = url - if metadata is not None: - self.metadata = metadata - if parameters is not None: - self.parameters = parameters - - @property - def id(self): - """Gets the id of this ApiNotebook. # noqa: E501 - - - :return: The id of this ApiNotebook. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this ApiNotebook. - - - :param id: The id of this ApiNotebook. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def created_at(self): - """Gets the created_at of this ApiNotebook. # noqa: E501 - - - :return: The created_at of this ApiNotebook. # noqa: E501 - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at): - """Sets the created_at of this ApiNotebook. - - - :param created_at: The created_at of this ApiNotebook. # noqa: E501 - :type: datetime - """ - - self._created_at = created_at - - @property - def name(self): - """Gets the name of this ApiNotebook. # noqa: E501 - - - :return: The name of this ApiNotebook. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiNotebook. - - - :param name: The name of this ApiNotebook. # noqa: E501 - :type: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self): - """Gets the description of this ApiNotebook. # noqa: E501 - - - :return: The description of this ApiNotebook. # noqa: E501 - :rtype: str - """ - return self._description - - @description.setter - def description(self, description): - """Sets the description of this ApiNotebook. - - - :param description: The description of this ApiNotebook. # noqa: E501 - :type: str - """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 - - self._description = description - - @property - def featured(self): - """Gets the featured of this ApiNotebook. # noqa: E501 - - - :return: The featured of this ApiNotebook. # noqa: E501 - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured): - """Sets the featured of this ApiNotebook. - - - :param featured: The featured of this ApiNotebook. # noqa: E501 - :type: bool - """ - - self._featured = featured - - @property - def publish_approved(self): - """Gets the publish_approved of this ApiNotebook. # noqa: E501 - - - :return: The publish_approved of this ApiNotebook. # noqa: E501 - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved): - """Sets the publish_approved of this ApiNotebook. - - - :param publish_approved: The publish_approved of this ApiNotebook. # noqa: E501 - :type: bool - """ - - self._publish_approved = publish_approved - - @property - def related_assets(self): - """Gets the related_assets of this ApiNotebook. # noqa: E501 - - - :return: The related_assets of this ApiNotebook. # noqa: E501 - :rtype: list[str] - """ - return self._related_assets - - @related_assets.setter - def related_assets(self, related_assets): - """Sets the related_assets of this ApiNotebook. - - - :param related_assets: The related_assets of this ApiNotebook. # noqa: E501 - :type: list[str] - """ - - self._related_assets = related_assets - - @property - def filter_categories(self): - """Gets the filter_categories of this ApiNotebook. # noqa: E501 - - - :return: The filter_categories of this ApiNotebook. # noqa: E501 - :rtype: dict(str, str) - """ - return self._filter_categories - - @filter_categories.setter - def filter_categories(self, filter_categories): - """Sets the filter_categories of this ApiNotebook. - - - :param filter_categories: The filter_categories of this ApiNotebook. # noqa: E501 - :type: dict(str, str) - """ - - self._filter_categories = filter_categories - - @property - def url(self): - """Gets the url of this ApiNotebook. # noqa: E501 - - The URL to the notebook source file (.ipynb) on GitHub.com # noqa: E501 - - :return: The url of this ApiNotebook. # noqa: E501 - :rtype: str - """ - return self._url - - @url.setter - def url(self, url): - """Sets the url of this ApiNotebook. - - The URL to the notebook source file (.ipynb) on GitHub.com # noqa: E501 - - :param url: The url of this ApiNotebook. # noqa: E501 - :type: str - """ - if url is None: - raise ValueError("Invalid value for `url`, must not be `None`") # noqa: E501 - - self._url = url - - @property - def metadata(self): - """Gets the metadata of this ApiNotebook. # noqa: E501 - - - :return: The metadata of this ApiNotebook. # noqa: E501 - :rtype: ApiMetadata - """ - return self._metadata - - @metadata.setter - def metadata(self, metadata): - """Sets the metadata of this ApiNotebook. - - - :param metadata: The metadata of this ApiNotebook. # noqa: E501 - :type: ApiMetadata - """ - - self._metadata = metadata - - @property - def parameters(self): - """Gets the parameters of this ApiNotebook. # noqa: E501 - - - :return: The parameters of this ApiNotebook. # noqa: E501 - :rtype: list[ApiParameter] - """ - return self._parameters - - @parameters.setter - def parameters(self, parameters): - """Sets the parameters of this ApiNotebook. - - - :param parameters: The parameters of this ApiNotebook. # noqa: E501 - :type: list[ApiParameter] - """ - - self._parameters = parameters - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiNotebook, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiNotebook): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_parameter.py b/api/client/swagger_client/models/api_parameter.py deleted file mode 100644 index b1c2b206..00000000 --- a/api/client/swagger_client/models/api_parameter.py +++ /dev/null @@ -1,199 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.any_value import AnyValue # noqa: F401,E501 - - -class ApiParameter(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'name': 'str', - 'description': 'str', - 'default': 'AnyValue', - 'value': 'AnyValue' - } - - attribute_map = { - 'name': 'name', - 'description': 'description', - 'default': 'default', - 'value': 'value' - } - - def __init__(self, name=None, description=None, default=None, value=None): # noqa: E501 - """ApiParameter - a model defined in Swagger""" # noqa: E501 - - self._name = None - self._description = None - self._default = None - self._value = None - self.discriminator = None - - self.name = name - if description is not None: - self.description = description - if default is not None: - self.default = default - if value is not None: - self.value = value - - @property - def name(self): - """Gets the name of this ApiParameter. # noqa: E501 - - - :return: The name of this ApiParameter. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiParameter. - - - :param name: The name of this ApiParameter. # noqa: E501 - :type: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self): - """Gets the description of this ApiParameter. # noqa: E501 - - - :return: The description of this ApiParameter. # noqa: E501 - :rtype: str - """ - return self._description - - @description.setter - def description(self, description): - """Sets the description of this ApiParameter. - - - :param description: The description of this ApiParameter. # noqa: E501 - :type: str - """ - - self._description = description - - @property - def default(self): - """Gets the default of this ApiParameter. # noqa: E501 - - - :return: The default of this ApiParameter. # noqa: E501 - :rtype: AnyValue - """ - return self._default - - @default.setter - def default(self, default): - """Sets the default of this ApiParameter. - - - :param default: The default of this ApiParameter. # noqa: E501 - :type: AnyValue - """ - - self._default = default - - @property - def value(self): - """Gets the value of this ApiParameter. # noqa: E501 - - - :return: The value of this ApiParameter. # noqa: E501 - :rtype: AnyValue - """ - return self._value - - @value.setter - def value(self, value): - """Sets the value of this ApiParameter. - - - :param value: The value of this ApiParameter. # noqa: E501 - :type: AnyValue - """ - - self._value = value - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiParameter, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiParameter): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_pipeline.py b/api/client/swagger_client/models/api_pipeline.py deleted file mode 100644 index 8546a04b..00000000 --- a/api/client/swagger_client/models/api_pipeline.py +++ /dev/null @@ -1,306 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_parameter import ApiParameter # noqa: F401,E501 - - -class ApiPipeline(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'id': 'str', - 'created_at': 'datetime', - 'name': 'str', - 'description': 'str', - 'parameters': 'list[ApiParameter]', - 'status': 'str', - 'default_version_id': 'str', - 'namespace': 'str' - } - - attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'parameters': 'parameters', - 'status': 'status', - 'default_version_id': 'default_version_id', - 'namespace': 'namespace' - } - - def __init__(self, id=None, created_at=None, name=None, description=None, parameters=None, status=None, default_version_id=None, namespace=None): # noqa: E501 - """ApiPipeline - a model defined in Swagger""" # noqa: E501 - - self._id = None - self._created_at = None - self._name = None - self._description = None - self._parameters = None - self._status = None - self._default_version_id = None - self._namespace = None - self.discriminator = None - - if id is not None: - self.id = id - if created_at is not None: - self.created_at = created_at - if name is not None: - self.name = name - if description is not None: - self.description = description - if parameters is not None: - self.parameters = parameters - if status is not None: - self.status = status - if default_version_id is not None: - self.default_version_id = default_version_id - if namespace is not None: - self.namespace = namespace - - @property - def id(self): - """Gets the id of this ApiPipeline. # noqa: E501 - - - :return: The id of this ApiPipeline. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this ApiPipeline. - - - :param id: The id of this ApiPipeline. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def created_at(self): - """Gets the created_at of this ApiPipeline. # noqa: E501 - - - :return: The created_at of this ApiPipeline. # noqa: E501 - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at): - """Sets the created_at of this ApiPipeline. - - - :param created_at: The created_at of this ApiPipeline. # noqa: E501 - :type: datetime - """ - - self._created_at = created_at - - @property - def name(self): - """Gets the name of this ApiPipeline. # noqa: E501 - - - :return: The name of this ApiPipeline. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiPipeline. - - - :param name: The name of this ApiPipeline. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def description(self): - """Gets the description of this ApiPipeline. # noqa: E501 - - - :return: The description of this ApiPipeline. # noqa: E501 - :rtype: str - """ - return self._description - - @description.setter - def description(self, description): - """Sets the description of this ApiPipeline. - - - :param description: The description of this ApiPipeline. # noqa: E501 - :type: str - """ - - self._description = description - - @property - def parameters(self): - """Gets the parameters of this ApiPipeline. # noqa: E501 - - - :return: The parameters of this ApiPipeline. # noqa: E501 - :rtype: list[ApiParameter] - """ - return self._parameters - - @parameters.setter - def parameters(self, parameters): - """Sets the parameters of this ApiPipeline. - - - :param parameters: The parameters of this ApiPipeline. # noqa: E501 - :type: list[ApiParameter] - """ - - self._parameters = parameters - - @property - def status(self): - """Gets the status of this ApiPipeline. # noqa: E501 - - In case any error happens retrieving a pipeline field, only pipeline ID and the error message is returned. Client has the flexibility of choosing how to handle error. This is especially useful during listing call. # noqa: E501 - - :return: The status of this ApiPipeline. # noqa: E501 - :rtype: str - """ - return self._status - - @status.setter - def status(self, status): - """Sets the status of this ApiPipeline. - - In case any error happens retrieving a pipeline field, only pipeline ID and the error message is returned. Client has the flexibility of choosing how to handle error. This is especially useful during listing call. # noqa: E501 - - :param status: The status of this ApiPipeline. # noqa: E501 - :type: str - """ - - self._status = status - - @property - def default_version_id(self): - """Gets the default_version_id of this ApiPipeline. # noqa: E501 - - The default version of the pipeline. As of now, the latest version is used as default. (In the future, if desired by customers, we can allow them to set default version.) # noqa: E501 - - :return: The default_version_id of this ApiPipeline. # noqa: E501 - :rtype: str - """ - return self._default_version_id - - @default_version_id.setter - def default_version_id(self, default_version_id): - """Sets the default_version_id of this ApiPipeline. - - The default version of the pipeline. As of now, the latest version is used as default. (In the future, if desired by customers, we can allow them to set default version.) # noqa: E501 - - :param default_version_id: The default_version_id of this ApiPipeline. # noqa: E501 - :type: str - """ - - self._default_version_id = default_version_id - - @property - def namespace(self): - """Gets the namespace of this ApiPipeline. # noqa: E501 - - - :return: The namespace of this ApiPipeline. # noqa: E501 - :rtype: str - """ - return self._namespace - - @namespace.setter - def namespace(self, namespace): - """Sets the namespace of this ApiPipeline. - - - :param namespace: The namespace of this ApiPipeline. # noqa: E501 - :type: str - """ - - self._namespace = namespace - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiPipeline, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiPipeline): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_pipeline_custom.py b/api/client/swagger_client/models/api_pipeline_custom.py deleted file mode 100644 index 2a28c336..00000000 --- a/api/client/swagger_client/models/api_pipeline_custom.py +++ /dev/null @@ -1,205 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_pipeline_dag import ApiPipelineDAG # noqa: F401,E501 -from swagger_client.models.api_pipeline_inputs import ApiPipelineInputs # noqa: F401,E501 - - -class ApiPipelineCustom(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'dag': 'ApiPipelineDAG', - 'inputs': 'ApiPipelineInputs', - 'name': 'str', - 'description': 'str' - } - - attribute_map = { - 'dag': 'dag', - 'inputs': 'inputs', - 'name': 'name', - 'description': 'description' - } - - def __init__(self, dag=None, inputs=None, name=None, description=None): # noqa: E501 - """ApiPipelineCustom - a model defined in Swagger""" # noqa: E501 - - self._dag = None - self._inputs = None - self._name = None - self._description = None - self.discriminator = None - - self.dag = dag - if inputs is not None: - self.inputs = inputs - self.name = name - if description is not None: - self.description = description - - @property - def dag(self): - """Gets the dag of this ApiPipelineCustom. # noqa: E501 - - - :return: The dag of this ApiPipelineCustom. # noqa: E501 - :rtype: ApiPipelineDAG - """ - return self._dag - - @dag.setter - def dag(self, dag): - """Sets the dag of this ApiPipelineCustom. - - - :param dag: The dag of this ApiPipelineCustom. # noqa: E501 - :type: ApiPipelineDAG - """ - if dag is None: - raise ValueError("Invalid value for `dag`, must not be `None`") # noqa: E501 - - self._dag = dag - - @property - def inputs(self): - """Gets the inputs of this ApiPipelineCustom. # noqa: E501 - - - :return: The inputs of this ApiPipelineCustom. # noqa: E501 - :rtype: ApiPipelineInputs - """ - return self._inputs - - @inputs.setter - def inputs(self, inputs): - """Sets the inputs of this ApiPipelineCustom. - - - :param inputs: The inputs of this ApiPipelineCustom. # noqa: E501 - :type: ApiPipelineInputs - """ - - self._inputs = inputs - - @property - def name(self): - """Gets the name of this ApiPipelineCustom. # noqa: E501 - - Name of the custom pipeline # noqa: E501 - - :return: The name of this ApiPipelineCustom. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiPipelineCustom. - - Name of the custom pipeline # noqa: E501 - - :param name: The name of this ApiPipelineCustom. # noqa: E501 - :type: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self): - """Gets the description of this ApiPipelineCustom. # noqa: E501 - - Optional description of the custom pipeline # noqa: E501 - - :return: The description of this ApiPipelineCustom. # noqa: E501 - :rtype: str - """ - return self._description - - @description.setter - def description(self, description): - """Sets the description of this ApiPipelineCustom. - - Optional description of the custom pipeline # noqa: E501 - - :param description: The description of this ApiPipelineCustom. # noqa: E501 - :type: str - """ - - self._description = description - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiPipelineCustom, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiPipelineCustom): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_pipeline_custom_run_payload.py b/api/client/swagger_client/models/api_pipeline_custom_run_payload.py deleted file mode 100644 index 14b49cb0..00000000 --- a/api/client/swagger_client/models/api_pipeline_custom_run_payload.py +++ /dev/null @@ -1,147 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_pipeline_custom import ApiPipelineCustom # noqa: F401,E501 -from swagger_client.models.dictionary import Dictionary # noqa: F401,E501 - - -class ApiPipelineCustomRunPayload(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'custom_pipeline': 'ApiPipelineCustom', - 'run_parameters': 'Dictionary' - } - - attribute_map = { - 'custom_pipeline': 'custom_pipeline', - 'run_parameters': 'run_parameters' - } - - def __init__(self, custom_pipeline=None, run_parameters=None): # noqa: E501 - """ApiPipelineCustomRunPayload - a model defined in Swagger""" # noqa: E501 - - self._custom_pipeline = None - self._run_parameters = None - self.discriminator = None - - if custom_pipeline is not None: - self.custom_pipeline = custom_pipeline - if run_parameters is not None: - self.run_parameters = run_parameters - - @property - def custom_pipeline(self): - """Gets the custom_pipeline of this ApiPipelineCustomRunPayload. # noqa: E501 - - - :return: The custom_pipeline of this ApiPipelineCustomRunPayload. # noqa: E501 - :rtype: ApiPipelineCustom - """ - return self._custom_pipeline - - @custom_pipeline.setter - def custom_pipeline(self, custom_pipeline): - """Sets the custom_pipeline of this ApiPipelineCustomRunPayload. - - - :param custom_pipeline: The custom_pipeline of this ApiPipelineCustomRunPayload. # noqa: E501 - :type: ApiPipelineCustom - """ - - self._custom_pipeline = custom_pipeline - - @property - def run_parameters(self): - """Gets the run_parameters of this ApiPipelineCustomRunPayload. # noqa: E501 - - - :return: The run_parameters of this ApiPipelineCustomRunPayload. # noqa: E501 - :rtype: Dictionary - """ - return self._run_parameters - - @run_parameters.setter - def run_parameters(self, run_parameters): - """Sets the run_parameters of this ApiPipelineCustomRunPayload. - - - :param run_parameters: The run_parameters of this ApiPipelineCustomRunPayload. # noqa: E501 - :type: Dictionary - """ - - self._run_parameters = run_parameters - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiPipelineCustomRunPayload, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiPipelineCustomRunPayload): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_pipeline_dag.py b/api/client/swagger_client/models/api_pipeline_dag.py deleted file mode 100644 index 44ecde1b..00000000 --- a/api/client/swagger_client/models/api_pipeline_dag.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_pipeline_task import ApiPipelineTask # noqa: F401,E501 - - -class ApiPipelineDAG(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'tasks': 'list[ApiPipelineTask]' - } - - attribute_map = { - 'tasks': 'tasks' - } - - def __init__(self, tasks=None): # noqa: E501 - """ApiPipelineDAG - a model defined in Swagger""" # noqa: E501 - - self._tasks = None - self.discriminator = None - - if tasks is not None: - self.tasks = tasks - - @property - def tasks(self): - """Gets the tasks of this ApiPipelineDAG. # noqa: E501 - - List of pipeline tasks. # noqa: E501 - - :return: The tasks of this ApiPipelineDAG. # noqa: E501 - :rtype: list[ApiPipelineTask] - """ - return self._tasks - - @tasks.setter - def tasks(self, tasks): - """Sets the tasks of this ApiPipelineDAG. - - List of pipeline tasks. # noqa: E501 - - :param tasks: The tasks of this ApiPipelineDAG. # noqa: E501 - :type: list[ApiPipelineTask] - """ - - self._tasks = tasks - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiPipelineDAG, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiPipelineDAG): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_pipeline_extended.py b/api/client/swagger_client/models/api_pipeline_extended.py deleted file mode 100644 index b2d4f8dc..00000000 --- a/api/client/swagger_client/models/api_pipeline_extended.py +++ /dev/null @@ -1,386 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_parameter import ApiParameter # noqa: F401,E501 -from swagger_client.models.api_pipeline import ApiPipeline # noqa: F401,E501 -from swagger_client.models.api_pipeline_extension import ApiPipelineExtension # noqa: F401,E501 - - -class ApiPipelineExtended(ApiPipeline, ApiPipelineExtension): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'id': 'str', - 'created_at': 'datetime', - 'name': 'str', - 'description': 'str', - 'parameters': 'list[ApiParameter]', - 'status': 'str', - 'default_version_id': 'str', - 'namespace': 'str', - 'annotations': 'dict(str, str)', - 'featured': 'bool', - 'publish_approved': 'bool' - } - - attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'parameters': 'parameters', - 'status': 'status', - 'default_version_id': 'default_version_id', - 'namespace': 'namespace', - 'annotations': 'annotations', - 'featured': 'featured', - 'publish_approved': 'publish_approved' - } - - def __init__(self, id=None, created_at=None, name=None, description=None, parameters=None, status=None, default_version_id=None, namespace=None, annotations=None, featured=None, publish_approved=None): # noqa: E501 - """ApiPipelineExtended - a model defined in Swagger""" # noqa: E501 - - self._id = None - self._created_at = None - self._name = None - self._description = None - self._parameters = None - self._status = None - self._default_version_id = None - self._namespace = None - self._annotations = None - self._featured = None - self._publish_approved = None - self.discriminator = None - - if id is not None: - self.id = id - if created_at is not None: - self.created_at = created_at - if name is not None: - self.name = name - if description is not None: - self.description = description - if parameters is not None: - self.parameters = parameters - if status is not None: - self.status = status - if default_version_id is not None: - self.default_version_id = default_version_id - if namespace is not None: - self.namespace = namespace - if annotations is not None: - self.annotations = annotations - if featured is not None: - self.featured = featured - if publish_approved is not None: - self.publish_approved = publish_approved - - # @property - # def id(self): - # """Gets the id of this ApiPipelineExtended. # noqa: E501 - # - # - # :return: The id of this ApiPipelineExtended. # noqa: E501 - # :rtype: str - # """ - # return self._id - # - # @id.setter - # def id(self, id): - # """Sets the id of this ApiPipelineExtended. - # - # - # :param id: The id of this ApiPipelineExtended. # noqa: E501 - # :type: str - # """ - # - # self._id = id - # - # @property - # def created_at(self): - # """Gets the created_at of this ApiPipelineExtended. # noqa: E501 - # - # - # :return: The created_at of this ApiPipelineExtended. # noqa: E501 - # :rtype: datetime - # """ - # return self._created_at - # - # @created_at.setter - # def created_at(self, created_at): - # """Sets the created_at of this ApiPipelineExtended. - # - # - # :param created_at: The created_at of this ApiPipelineExtended. # noqa: E501 - # :type: datetime - # """ - # - # self._created_at = created_at - # - # @property - # def name(self): - # """Gets the name of this ApiPipelineExtended. # noqa: E501 - # - # - # :return: The name of this ApiPipelineExtended. # noqa: E501 - # :rtype: str - # """ - # return self._name - # - # @name.setter - # def name(self, name): - # """Sets the name of this ApiPipelineExtended. - # - # - # :param name: The name of this ApiPipelineExtended. # noqa: E501 - # :type: str - # """ - # - # self._name = name - # - # @property - # def description(self): - # """Gets the description of this ApiPipelineExtended. # noqa: E501 - # - # - # :return: The description of this ApiPipelineExtended. # noqa: E501 - # :rtype: str - # """ - # return self._description - # - # @description.setter - # def description(self, description): - # """Sets the description of this ApiPipelineExtended. - # - # - # :param description: The description of this ApiPipelineExtended. # noqa: E501 - # :type: str - # """ - # - # self._description = description - # - # @property - # def parameters(self): - # """Gets the parameters of this ApiPipelineExtended. # noqa: E501 - # - # - # :return: The parameters of this ApiPipelineExtended. # noqa: E501 - # :rtype: list[ApiParameter] - # """ - # return self._parameters - # - # @parameters.setter - # def parameters(self, parameters): - # """Sets the parameters of this ApiPipelineExtended. - # - # - # :param parameters: The parameters of this ApiPipelineExtended. # noqa: E501 - # :type: list[ApiParameter] - # """ - # - # self._parameters = parameters - # - # @property - # def status(self): - # """Gets the status of this ApiPipelineExtended. # noqa: E501 - # - # In case any error happens retrieving a pipeline field, only pipeline ID and the error message is returned. Client has the flexibility of choosing how to handle error. This is especially useful during listing call. # noqa: E501 - # - # :return: The status of this ApiPipelineExtended. # noqa: E501 - # :rtype: str - # """ - # return self._status - # - # @status.setter - # def status(self, status): - # """Sets the status of this ApiPipelineExtended. - # - # In case any error happens retrieving a pipeline field, only pipeline ID and the error message is returned. Client has the flexibility of choosing how to handle error. This is especially useful during listing call. # noqa: E501 - # - # :param status: The status of this ApiPipelineExtended. # noqa: E501 - # :type: str - # """ - # - # self._status = status - # - # @property - # def default_version_id(self): - # """Gets the default_version_id of this ApiPipelineExtended. # noqa: E501 - # - # The default version of the pipeline. As of now, the latest version is used as default. (In the future, if desired by customers, we can allow them to set default version.) # noqa: E501 - # - # :return: The default_version_id of this ApiPipelineExtended. # noqa: E501 - # :rtype: str - # """ - # return self._default_version_id - # - # @default_version_id.setter - # def default_version_id(self, default_version_id): - # """Sets the default_version_id of this ApiPipelineExtended. - # - # The default version of the pipeline. As of now, the latest version is used as default. (In the future, if desired by customers, we can allow them to set default version.) # noqa: E501 - # - # :param default_version_id: The default_version_id of this ApiPipelineExtended. # noqa: E501 - # :type: str - # """ - # - # self._default_version_id = default_version_id - # - # @property - # def namespace(self): - # """Gets the namespace of this ApiPipelineExtended. # noqa: E501 - # - # - # :return: The namespace of this ApiPipelineExtended. # noqa: E501 - # :rtype: str - # """ - # return self._namespace - # - # @namespace.setter - # def namespace(self, namespace): - # """Sets the namespace of this ApiPipelineExtended. - # - # - # :param namespace: The namespace of this ApiPipelineExtended. # noqa: E501 - # :type: str - # """ - # - # self._namespace = namespace - # - # @property - # def annotations(self): - # """Gets the annotations of this ApiPipelineExtended. # noqa: E501 - # - # - # :return: The annotations of this ApiPipelineExtended. # noqa: E501 - # :rtype: dict(str, str) - # """ - # return self._annotations - # - # @annotations.setter - # def annotations(self, annotations): - # """Sets the annotations of this ApiPipelineExtended. - # - # - # :param annotations: The annotations of this ApiPipelineExtended. # noqa: E501 - # :type: dict(str, str) - # """ - # - # self._annotations = annotations - # - # @property - # def featured(self): - # """Gets the featured of this ApiPipelineExtended. # noqa: E501 - # - # - # :return: The featured of this ApiPipelineExtended. # noqa: E501 - # :rtype: bool - # """ - # return self._featured - # - # @featured.setter - # def featured(self, featured): - # """Sets the featured of this ApiPipelineExtended. - # - # - # :param featured: The featured of this ApiPipelineExtended. # noqa: E501 - # :type: bool - # """ - # - # self._featured = featured - # - # @property - # def publish_approved(self): - # """Gets the publish_approved of this ApiPipelineExtended. # noqa: E501 - # - # - # :return: The publish_approved of this ApiPipelineExtended. # noqa: E501 - # :rtype: bool - # """ - # return self._publish_approved - # - # @publish_approved.setter - # def publish_approved(self, publish_approved): - # """Sets the publish_approved of this ApiPipelineExtended. - # - # - # :param publish_approved: The publish_approved of this ApiPipelineExtended. # noqa: E501 - # :type: bool - # """ - # - # self._publish_approved = publish_approved - # - # def to_dict(self): - # """Returns the model properties as a dict""" - # result = {} - # - # for attr, _ in six.iteritems(self.swagger_types): - # value = getattr(self, attr) - # if isinstance(value, list): - # result[attr] = list(map( - # lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - # value - # )) - # elif hasattr(value, "to_dict"): - # result[attr] = value.to_dict() - # elif isinstance(value, dict): - # result[attr] = dict(map( - # lambda item: (item[0], item[1].to_dict()) - # if hasattr(item[1], "to_dict") else item, - # value.items() - # )) - # else: - # result[attr] = value - # if issubclass(ApiPipelineExtended, dict): - # for key, value in self.items(): - # result[key] = value - # - # return result - # - # def to_str(self): - # """Returns the string representation of the model""" - # return pprint.pformat(self.to_dict()) - # - # def __repr__(self): - # """For `print` and `pprint`""" - # return self.to_str() - # - # def __eq__(self, other): - # """Returns true if both objects are equal""" - # if not isinstance(other, ApiPipelineExtended): - # return False - # - # return self.__dict__ == other.__dict__ - # - # def __ne__(self, other): - # """Returns true if both objects are not equal""" - # return not self == other diff --git a/api/client/swagger_client/models/api_pipeline_extension.py b/api/client/swagger_client/models/api_pipeline_extension.py deleted file mode 100644 index 5a178fa2..00000000 --- a/api/client/swagger_client/models/api_pipeline_extension.py +++ /dev/null @@ -1,196 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiPipelineExtension(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'id': 'str', - 'annotations': 'dict(str, str)', - 'featured': 'bool', - 'publish_approved': 'bool' - } - - attribute_map = { - 'id': 'id', - 'annotations': 'annotations', - 'featured': 'featured', - 'publish_approved': 'publish_approved' - } - - def __init__(self, id=None, annotations=None, featured=None, publish_approved=None): # noqa: E501 - """ApiPipelineExtension - a model defined in Swagger""" # noqa: E501 - - self._id = None - self._annotations = None - self._featured = None - self._publish_approved = None - self.discriminator = None - - if id is not None: - self.id = id - if annotations is not None: - self.annotations = annotations - if featured is not None: - self.featured = featured - if publish_approved is not None: - self.publish_approved = publish_approved - - @property - def id(self): - """Gets the id of this ApiPipelineExtension. # noqa: E501 - - - :return: The id of this ApiPipelineExtension. # noqa: E501 - :rtype: str - """ - return self._id - - @id.setter - def id(self, id): - """Sets the id of this ApiPipelineExtension. - - - :param id: The id of this ApiPipelineExtension. # noqa: E501 - :type: str - """ - - self._id = id - - @property - def annotations(self): - """Gets the annotations of this ApiPipelineExtension. # noqa: E501 - - - :return: The annotations of this ApiPipelineExtension. # noqa: E501 - :rtype: dict(str, str) - """ - return self._annotations - - @annotations.setter - def annotations(self, annotations): - """Sets the annotations of this ApiPipelineExtension. - - - :param annotations: The annotations of this ApiPipelineExtension. # noqa: E501 - :type: dict(str, str) - """ - - self._annotations = annotations - - @property - def featured(self): - """Gets the featured of this ApiPipelineExtension. # noqa: E501 - - - :return: The featured of this ApiPipelineExtension. # noqa: E501 - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured): - """Sets the featured of this ApiPipelineExtension. - - - :param featured: The featured of this ApiPipelineExtension. # noqa: E501 - :type: bool - """ - - self._featured = featured - - @property - def publish_approved(self): - """Gets the publish_approved of this ApiPipelineExtension. # noqa: E501 - - - :return: The publish_approved of this ApiPipelineExtension. # noqa: E501 - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved): - """Sets the publish_approved of this ApiPipelineExtension. - - - :param publish_approved: The publish_approved of this ApiPipelineExtension. # noqa: E501 - :type: bool - """ - - self._publish_approved = publish_approved - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiPipelineExtension, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiPipelineExtension): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_pipeline_inputs.py b/api/client/swagger_client/models/api_pipeline_inputs.py deleted file mode 100644 index 84349a36..00000000 --- a/api/client/swagger_client/models/api_pipeline_inputs.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_parameter import ApiParameter # noqa: F401,E501 - - -class ApiPipelineInputs(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'parameters': 'list[ApiParameter]' - } - - attribute_map = { - 'parameters': 'parameters' - } - - def __init__(self, parameters=None): # noqa: E501 - """ApiPipelineInputs - a model defined in Swagger""" # noqa: E501 - - self._parameters = None - self.discriminator = None - - if parameters is not None: - self.parameters = parameters - - @property - def parameters(self): - """Gets the parameters of this ApiPipelineInputs. # noqa: E501 - - List of pipeline parameters # noqa: E501 - - :return: The parameters of this ApiPipelineInputs. # noqa: E501 - :rtype: list[ApiParameter] - """ - return self._parameters - - @parameters.setter - def parameters(self, parameters): - """Sets the parameters of this ApiPipelineInputs. - - List of pipeline parameters # noqa: E501 - - :param parameters: The parameters of this ApiPipelineInputs. # noqa: E501 - :type: list[ApiParameter] - """ - - self._parameters = parameters - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiPipelineInputs, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiPipelineInputs): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_pipeline_task.py b/api/client/swagger_client/models/api_pipeline_task.py deleted file mode 100644 index 405973ce..00000000 --- a/api/client/swagger_client/models/api_pipeline_task.py +++ /dev/null @@ -1,232 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_pipeline_task_arguments import ApiPipelineTaskArguments # noqa: F401,E501 - - -class ApiPipelineTask(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'name': 'str', - 'artifact_type': 'str', - 'artifact_id': 'str', - 'arguments': 'ApiPipelineTaskArguments', - 'dependencies': 'list[str]' - } - - attribute_map = { - 'name': 'name', - 'artifact_type': 'artifact_type', - 'artifact_id': 'artifact_id', - 'arguments': 'arguments', - 'dependencies': 'dependencies' - } - - def __init__(self, name=None, artifact_type=None, artifact_id=None, arguments=None, dependencies=None): # noqa: E501 - """ApiPipelineTask - a model defined in Swagger""" # noqa: E501 - - self._name = None - self._artifact_type = None - self._artifact_id = None - self._arguments = None - self._dependencies = None - self.discriminator = None - - if name is not None: - self.name = name - self.artifact_type = artifact_type - self.artifact_id = artifact_id - if arguments is not None: - self.arguments = arguments - if dependencies is not None: - self.dependencies = dependencies - - @property - def name(self): - """Gets the name of this ApiPipelineTask. # noqa: E501 - - - :return: The name of this ApiPipelineTask. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiPipelineTask. - - - :param name: The name of this ApiPipelineTask. # noqa: E501 - :type: str - """ - - self._name = name - - @property - def artifact_type(self): - """Gets the artifact_type of this ApiPipelineTask. # noqa: E501 - - The type of artifact for this task, can be either one of: 'component', 'model', 'notebook', 'pipeline' # noqa: E501 - - :return: The artifact_type of this ApiPipelineTask. # noqa: E501 - :rtype: str - """ - return self._artifact_type - - @artifact_type.setter - def artifact_type(self, artifact_type): - """Sets the artifact_type of this ApiPipelineTask. - - The type of artifact for this task, can be either one of: 'component', 'model', 'notebook', 'pipeline' # noqa: E501 - - :param artifact_type: The artifact_type of this ApiPipelineTask. # noqa: E501 - :type: str - """ - if artifact_type is None: - raise ValueError("Invalid value for `artifact_type`, must not be `None`") # noqa: E501 - - self._artifact_type = artifact_type - - @property - def artifact_id(self): - """Gets the artifact_id of this ApiPipelineTask. # noqa: E501 - - The UUID of the artifact for this task # noqa: E501 - - :return: The artifact_id of this ApiPipelineTask. # noqa: E501 - :rtype: str - """ - return self._artifact_id - - @artifact_id.setter - def artifact_id(self, artifact_id): - """Sets the artifact_id of this ApiPipelineTask. - - The UUID of the artifact for this task # noqa: E501 - - :param artifact_id: The artifact_id of this ApiPipelineTask. # noqa: E501 - :type: str - """ - if artifact_id is None: - raise ValueError("Invalid value for `artifact_id`, must not be `None`") # noqa: E501 - - self._artifact_id = artifact_id - - @property - def arguments(self): - """Gets the arguments of this ApiPipelineTask. # noqa: E501 - - - :return: The arguments of this ApiPipelineTask. # noqa: E501 - :rtype: ApiPipelineTaskArguments - """ - return self._arguments - - @arguments.setter - def arguments(self, arguments): - """Sets the arguments of this ApiPipelineTask. - - - :param arguments: The arguments of this ApiPipelineTask. # noqa: E501 - :type: ApiPipelineTaskArguments - """ - - self._arguments = arguments - - @property - def dependencies(self): - """Gets the dependencies of this ApiPipelineTask. # noqa: E501 - - Task dependencies, referring to upstream tasks that have to be completed prior to running this task by their respective task names # noqa: E501 - - :return: The dependencies of this ApiPipelineTask. # noqa: E501 - :rtype: list[str] - """ - return self._dependencies - - @dependencies.setter - def dependencies(self, dependencies): - """Sets the dependencies of this ApiPipelineTask. - - Task dependencies, referring to upstream tasks that have to be completed prior to running this task by their respective task names # noqa: E501 - - :param dependencies: The dependencies of this ApiPipelineTask. # noqa: E501 - :type: list[str] - """ - - self._dependencies = dependencies - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiPipelineTask, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiPipelineTask): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_pipeline_task_arguments.py b/api/client/swagger_client/models/api_pipeline_task_arguments.py deleted file mode 100644 index 13bd3be0..00000000 --- a/api/client/swagger_client/models/api_pipeline_task_arguments.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_parameter import ApiParameter # noqa: F401,E501 - - -class ApiPipelineTaskArguments(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'parameters': 'list[ApiParameter]' - } - - attribute_map = { - 'parameters': 'parameters' - } - - def __init__(self, parameters=None): # noqa: E501 - """ApiPipelineTaskArguments - a model defined in Swagger""" # noqa: E501 - - self._parameters = None - self.discriminator = None - - if parameters is not None: - self.parameters = parameters - - @property - def parameters(self): - """Gets the parameters of this ApiPipelineTaskArguments. # noqa: E501 - - - :return: The parameters of this ApiPipelineTaskArguments. # noqa: E501 - :rtype: list[ApiParameter] - """ - return self._parameters - - @parameters.setter - def parameters(self, parameters): - """Sets the parameters of this ApiPipelineTaskArguments. - - - :param parameters: The parameters of this ApiPipelineTaskArguments. # noqa: E501 - :type: list[ApiParameter] - """ - - self._parameters = parameters - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiPipelineTaskArguments, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiPipelineTaskArguments): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_run_code_response.py b/api/client/swagger_client/models/api_run_code_response.py deleted file mode 100644 index 23bf180c..00000000 --- a/api/client/swagger_client/models/api_run_code_response.py +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiRunCodeResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'run_url': 'str', - 'run_output_location': 'str' - } - - attribute_map = { - 'run_url': 'run_url', - 'run_output_location': 'run_output_location' - } - - def __init__(self, run_url=None, run_output_location=None): # noqa: E501 - """ApiRunCodeResponse - a model defined in Swagger""" # noqa: E501 - - self._run_url = None - self._run_output_location = None - self.discriminator = None - - self.run_url = run_url - if run_output_location is not None: - self.run_output_location = run_output_location - - @property - def run_url(self): - """Gets the run_url of this ApiRunCodeResponse. # noqa: E501 - - The URL path to view the run details in the Kubeflow Pipeline Web UI # noqa: E501 - - :return: The run_url of this ApiRunCodeResponse. # noqa: E501 - :rtype: str - """ - return self._run_url - - @run_url.setter - def run_url(self, run_url): - """Sets the run_url of this ApiRunCodeResponse. - - The URL path to view the run details in the Kubeflow Pipeline Web UI # noqa: E501 - - :param run_url: The run_url of this ApiRunCodeResponse. # noqa: E501 - :type: str - """ - if run_url is None: - raise ValueError("Invalid value for `run_url`, must not be `None`") # noqa: E501 - - self._run_url = run_url - - @property - def run_output_location(self): - """Gets the run_output_location of this ApiRunCodeResponse. # noqa: E501 - - The location of the output artifacts produced by the run, if any. # noqa: E501 - - :return: The run_output_location of this ApiRunCodeResponse. # noqa: E501 - :rtype: str - """ - return self._run_output_location - - @run_output_location.setter - def run_output_location(self, run_output_location): - """Sets the run_output_location of this ApiRunCodeResponse. - - The location of the output artifacts produced by the run, if any. # noqa: E501 - - :param run_output_location: The run_output_location of this ApiRunCodeResponse. # noqa: E501 - :type: str - """ - - self._run_output_location = run_output_location - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiRunCodeResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiRunCodeResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_settings.py b/api/client/swagger_client/models/api_settings.py deleted file mode 100644 index 8b7656c5..00000000 --- a/api/client/swagger_client/models/api_settings.py +++ /dev/null @@ -1,123 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_settings_section import ApiSettingsSection # noqa: F401,E501 - - -class ApiSettings(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'sections': 'list[ApiSettingsSection]' - } - - attribute_map = { - 'sections': 'sections' - } - - def __init__(self, sections=None): # noqa: E501 - """ApiSettings - a model defined in Swagger""" # noqa: E501 - - self._sections = None - self.discriminator = None - - self.sections = sections - - @property - def sections(self): - """Gets the sections of this ApiSettings. # noqa: E501 - - List of configuration categories. # noqa: E501 - - :return: The sections of this ApiSettings. # noqa: E501 - :rtype: list[ApiSettingsSection] - """ - return self._sections - - @sections.setter - def sections(self, sections): - """Sets the sections of this ApiSettings. - - List of configuration categories. # noqa: E501 - - :param sections: The sections of this ApiSettings. # noqa: E501 - :type: list[ApiSettingsSection] - """ - if sections is None: - raise ValueError("Invalid value for `sections`, must not be `None`") # noqa: E501 - - self._sections = sections - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiSettings, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiSettings): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_settings_section.py b/api/client/swagger_client/models/api_settings_section.py deleted file mode 100644 index 8c52ff99..00000000 --- a/api/client/swagger_client/models/api_settings_section.py +++ /dev/null @@ -1,179 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.api_parameter import ApiParameter # noqa: F401,E501 - - -class ApiSettingsSection(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'name': 'str', - 'description': 'str', - 'settings': 'list[ApiParameter]' - } - - attribute_map = { - 'name': 'name', - 'description': 'description', - 'settings': 'settings' - } - - def __init__(self, name=None, description=None, settings=None): # noqa: E501 - """ApiSettingsSection - a model defined in Swagger""" # noqa: E501 - - self._name = None - self._description = None - self._settings = None - self.discriminator = None - - self.name = name - if description is not None: - self.description = description - if settings is not None: - self.settings = settings - - @property - def name(self): - """Gets the name of this ApiSettingsSection. # noqa: E501 - - Display name of the configuration category. # noqa: E501 - - :return: The name of this ApiSettingsSection. # noqa: E501 - :rtype: str - """ - return self._name - - @name.setter - def name(self, name): - """Sets the name of this ApiSettingsSection. - - Display name of the configuration category. # noqa: E501 - - :param name: The name of this ApiSettingsSection. # noqa: E501 - :type: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self): - """Gets the description of this ApiSettingsSection. # noqa: E501 - - Display text of the configuration category. # noqa: E501 - - :return: The description of this ApiSettingsSection. # noqa: E501 - :rtype: str - """ - return self._description - - @description.setter - def description(self, description): - """Sets the description of this ApiSettingsSection. - - Display text of the configuration category. # noqa: E501 - - :param description: The description of this ApiSettingsSection. # noqa: E501 - :type: str - """ - - self._description = description - - @property - def settings(self): - """Gets the settings of this ApiSettingsSection. # noqa: E501 - - List of settings. # noqa: E501 - - :return: The settings of this ApiSettingsSection. # noqa: E501 - :rtype: list[ApiParameter] - """ - return self._settings - - @settings.setter - def settings(self, settings): - """Sets the settings of this ApiSettingsSection. - - List of settings. # noqa: E501 - - :param settings: The settings of this ApiSettingsSection. # noqa: E501 - :type: list[ApiParameter] - """ - - self._settings = settings - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiSettingsSection, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiSettingsSection): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_status.py b/api/client/swagger_client/models/api_status.py deleted file mode 100644 index 0393c10e..00000000 --- a/api/client/swagger_client/models/api_status.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.protobuf_any import ProtobufAny # noqa: F401,E501 - - -class ApiStatus(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'error': 'str', - 'code': 'int', - 'details': 'list[ProtobufAny]' - } - - attribute_map = { - 'error': 'error', - 'code': 'code', - 'details': 'details' - } - - def __init__(self, error=None, code=None, details=None): # noqa: E501 - """ApiStatus - a model defined in Swagger""" # noqa: E501 - - self._error = None - self._code = None - self._details = None - self.discriminator = None - - if error is not None: - self.error = error - if code is not None: - self.code = code - if details is not None: - self.details = details - - @property - def error(self): - """Gets the error of this ApiStatus. # noqa: E501 - - - :return: The error of this ApiStatus. # noqa: E501 - :rtype: str - """ - return self._error - - @error.setter - def error(self, error): - """Sets the error of this ApiStatus. - - - :param error: The error of this ApiStatus. # noqa: E501 - :type: str - """ - - self._error = error - - @property - def code(self): - """Gets the code of this ApiStatus. # noqa: E501 - - - :return: The code of this ApiStatus. # noqa: E501 - :rtype: int - """ - return self._code - - @code.setter - def code(self, code): - """Sets the code of this ApiStatus. - - - :param code: The code of this ApiStatus. # noqa: E501 - :type: int - """ - - self._code = code - - @property - def details(self): - """Gets the details of this ApiStatus. # noqa: E501 - - - :return: The details of this ApiStatus. # noqa: E501 - :rtype: list[ProtobufAny] - """ - return self._details - - @details.setter - def details(self, details): - """Sets the details of this ApiStatus. - - - :param details: The details of this ApiStatus. # noqa: E501 - :type: list[ProtobufAny] - """ - - self._details = details - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiStatus, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiStatus): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/api_url.py b/api/client/swagger_client/models/api_url.py deleted file mode 100644 index 7bd94eae..00000000 --- a/api/client/swagger_client/models/api_url.py +++ /dev/null @@ -1,118 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ApiUrl(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'pipeline_url': 'str' - } - - attribute_map = { - 'pipeline_url': 'pipeline_url' - } - - def __init__(self, pipeline_url=None): # noqa: E501 - """ApiUrl - a model defined in Swagger""" # noqa: E501 - - self._pipeline_url = None - self.discriminator = None - - if pipeline_url is not None: - self.pipeline_url = pipeline_url - - @property - def pipeline_url(self): - """Gets the pipeline_url of this ApiUrl. # noqa: E501 - - - :return: The pipeline_url of this ApiUrl. # noqa: E501 - :rtype: str - """ - return self._pipeline_url - - @pipeline_url.setter - def pipeline_url(self, pipeline_url): - """Sets the pipeline_url of this ApiUrl. - - - :param pipeline_url: The pipeline_url of this ApiUrl. # noqa: E501 - :type: str - """ - - self._pipeline_url = pipeline_url - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ApiUrl, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ApiUrl): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/dictionary.py b/api/client/swagger_client/models/dictionary.py deleted file mode 100644 index b10e9562..00000000 --- a/api/client/swagger_client/models/dictionary.py +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - -from swagger_client.models.any_value import AnyValue # noqa: F401,E501 - - -class Dictionary(dict): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - } - - attribute_map = { - } - - def __init__(self): # noqa: E501 - """Dictionary - a model defined in Swagger""" # noqa: E501 - self.discriminator = None - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(Dictionary, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, Dictionary): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/models/protobuf_any.py b/api/client/swagger_client/models/protobuf_any.py deleted file mode 100644 index 40e14b00..00000000 --- a/api/client/swagger_client/models/protobuf_any.py +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -import pprint -import re # noqa: F401 - -import six - - -class ProtobufAny(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'type_url': 'str', - 'value': 'str' - } - - attribute_map = { - 'type_url': 'type_url', - 'value': 'value' - } - - def __init__(self, type_url=None, value=None): # noqa: E501 - """ProtobufAny - a model defined in Swagger""" # noqa: E501 - - self._type_url = None - self._value = None - self.discriminator = None - - if type_url is not None: - self.type_url = type_url - if value is not None: - self.value = value - - @property - def type_url(self): - """Gets the type_url of this ProtobufAny. # noqa: E501 - - TODO # noqa: E501 - - :return: The type_url of this ProtobufAny. # noqa: E501 - :rtype: str - """ - return self._type_url - - @type_url.setter - def type_url(self, type_url): - """Sets the type_url of this ProtobufAny. - - TODO # noqa: E501 - - :param type_url: The type_url of this ProtobufAny. # noqa: E501 - :type: str - """ - - self._type_url = type_url - - @property - def value(self): - """Gets the value of this ProtobufAny. # noqa: E501 - - Must be a valid serialized protocol buffer of the above specified type. # noqa: E501 - - :return: The value of this ProtobufAny. # noqa: E501 - :rtype: str - """ - return self._value - - @value.setter - def value(self, value): - """Sets the value of this ProtobufAny. - - Must be a valid serialized protocol buffer of the above specified type. # noqa: E501 - - :param value: The value of this ProtobufAny. # noqa: E501 - :type: str - """ - if value is not None and not re.search(r'^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$', value): # noqa: E501 - raise ValueError(r"Invalid value for `value`, must be a follow pattern or equal to `/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/`") # noqa: E501 - - self._value = value - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(ProtobufAny, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, ProtobufAny): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/client/swagger_client/rest.py b/api/client/swagger_client/rest.py deleted file mode 100644 index dbff75e3..00000000 --- a/api/client/swagger_client/rest.py +++ /dev/null @@ -1,326 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import io -import json -import logging -import re -import ssl - -import certifi -# python 2 and python 3 compatibility library -import six -from six.moves.urllib.parse import urlencode - -try: - import urllib3 -except ImportError: - raise ImportError('Swagger python client requires urllib3.') - - -logger = logging.getLogger(__name__) - - -class RESTResponse(io.IOBase): - - def __init__(self, resp): - self.urllib3_response = resp - self.status = resp.status - self.reason = resp.reason - self.data = resp.data - - def getheaders(self): - """Returns a dictionary of the response headers.""" - return self.urllib3_response.getheaders() - - def getheader(self, name, default=None): - """Returns a given response header.""" - return self.urllib3_response.getheader(name, default) - - -class RESTClientObject(object): - - def __init__(self, configuration, pools_size=4, maxsize=None): - # urllib3.PoolManager will pass all kw parameters to connectionpool - # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501 - # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501 - # maxsize is the number of requests to host that are allowed in parallel # noqa: E501 - # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501 - - # cert_reqs - if configuration.verify_ssl: - cert_reqs = ssl.CERT_REQUIRED - else: - cert_reqs = ssl.CERT_NONE - - # ca_certs - if configuration.ssl_ca_cert: - ca_certs = configuration.ssl_ca_cert - else: - # if not set certificate file, use Mozilla's root certificates. - ca_certs = certifi.where() - - addition_pool_args = {} - if configuration.assert_hostname is not None: - addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E501 - - if maxsize is None: - if configuration.connection_pool_maxsize is not None: - maxsize = configuration.connection_pool_maxsize - else: - maxsize = 4 - - # https pool manager - if configuration.proxy: - self.pool_manager = urllib3.ProxyManager( - num_pools=pools_size, - maxsize=maxsize, - cert_reqs=cert_reqs, - ca_certs=ca_certs, - cert_file=configuration.cert_file, - key_file=configuration.key_file, - proxy_url=configuration.proxy, - **addition_pool_args - ) - else: - self.pool_manager = urllib3.PoolManager( - num_pools=pools_size, - maxsize=maxsize, - cert_reqs=cert_reqs, - ca_certs=ca_certs, - cert_file=configuration.cert_file, - key_file=configuration.key_file, - **addition_pool_args - ) - - def request(self, method, url, query_params=None, headers=None, - body=None, post_params=None, _preload_content=True, - _request_timeout=None): - """Perform requests. - - :param method: http request method - :param url: http request url - :param query_params: query parameters in the url - :param headers: http request headers - :param body: request json body, for `application/json` - :param post_params: request post parameters, - `application/x-www-form-urlencoded` - and `multipart/form-data` - :param _preload_content: if False, the urllib3.HTTPResponse object will - be returned without reading/decoding response - data. Default is True. - :param _request_timeout: timeout setting for this request. If one - number provided, it will be total request - timeout. It can also be a pair (tuple) of - (connection, read) timeouts. - """ - method = method.upper() - assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', - 'PATCH', 'OPTIONS'] - - if post_params and body: - raise ValueError( - "body parameter cannot be used with post_params parameter." - ) - - post_params = post_params or {} - headers = headers or {} - - timeout = None - if _request_timeout: - if isinstance(_request_timeout, (int, ) if six.PY3 else (int, long)): # noqa: E501,F821 - timeout = urllib3.Timeout(total=_request_timeout) - elif (isinstance(_request_timeout, tuple) and - len(_request_timeout) == 2): - timeout = urllib3.Timeout( - connect=_request_timeout[0], read=_request_timeout[1]) - - if 'Content-Type' not in headers: - headers['Content-Type'] = 'application/json' - - try: - # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` - if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']: - if query_params: - url += '?' + urlencode(query_params) - if re.search('json', headers['Content-Type'], re.IGNORECASE): - request_body = None - if body is not None: - request_body = json.dumps(body) - r = self.pool_manager.request( - method, url, - body=request_body, - preload_content=_preload_content, - timeout=timeout, - headers=headers) - elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 - r = self.pool_manager.request( - method, url, - fields=post_params, - encode_multipart=False, - preload_content=_preload_content, - timeout=timeout, - headers=headers) - elif headers['Content-Type'] == 'multipart/form-data': - # must del headers['Content-Type'], or the correct - # Content-Type which generated by urllib3 will be - # overwritten. - del headers['Content-Type'] - r = self.pool_manager.request( - method, url, - fields=post_params, - encode_multipart=True, - preload_content=_preload_content, - timeout=timeout, - headers=headers) - # Pass a `string` parameter directly in the body to support - # other content types than Json when `body` argument is - # provided in serialized form - elif isinstance(body, str): - request_body = body - r = self.pool_manager.request( - method, url, - body=request_body, - preload_content=_preload_content, - timeout=timeout, - headers=headers) - else: - # Cannot generate the request from given parameters - msg = """Cannot prepare a request message for provided - arguments. Please check that your arguments match - declared content type.""" - raise ApiException(status=0, reason=msg) - # For `GET`, `HEAD` - else: - r = self.pool_manager.request(method, url, - fields=query_params, - preload_content=_preload_content, - timeout=timeout, - headers=headers) - except urllib3.exceptions.SSLError as e: - msg = "{0}\n{1}".format(type(e).__name__, str(e)) - raise ApiException(status=0, reason=msg) - - if _preload_content: - r = RESTResponse(r) - - # In the python 3, the response.data is bytes. - # we need to decode it to string. - if six.PY3: - r.data = r.data.decode('utf8') - - # log response body - logger.debug("response body: %s", r.data) - - if not 200 <= r.status <= 299: - raise ApiException(http_resp=r) - - return r - - def GET(self, url, headers=None, query_params=None, _preload_content=True, - _request_timeout=None): - return self.request("GET", url, - headers=headers, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - query_params=query_params) - - def HEAD(self, url, headers=None, query_params=None, _preload_content=True, - _request_timeout=None): - return self.request("HEAD", url, - headers=headers, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - query_params=query_params) - - def OPTIONS(self, url, headers=None, query_params=None, post_params=None, - body=None, _preload_content=True, _request_timeout=None): - return self.request("OPTIONS", url, - headers=headers, - query_params=query_params, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body) - - def DELETE(self, url, headers=None, query_params=None, body=None, - _preload_content=True, _request_timeout=None): - return self.request("DELETE", url, - headers=headers, - query_params=query_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body) - - def POST(self, url, headers=None, query_params=None, post_params=None, - body=None, _preload_content=True, _request_timeout=None): - return self.request("POST", url, - headers=headers, - query_params=query_params, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body) - - def PUT(self, url, headers=None, query_params=None, post_params=None, - body=None, _preload_content=True, _request_timeout=None): - return self.request("PUT", url, - headers=headers, - query_params=query_params, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body) - - def PATCH(self, url, headers=None, query_params=None, post_params=None, - body=None, _preload_content=True, _request_timeout=None): - return self.request("PATCH", url, - headers=headers, - query_params=query_params, - post_params=post_params, - _preload_content=_preload_content, - _request_timeout=_request_timeout, - body=body) - - -class ApiException(Exception): - - def __init__(self, status=None, reason=None, http_resp=None): - if http_resp: - self.status = http_resp.status - self.reason = http_resp.reason - self.body = http_resp.data - self.headers = http_resp.getheaders() - else: - self.status = status - self.reason = reason - self.body = None - self.headers = None - - def __str__(self): - """Custom error messages for exception""" - error_message = "({0})\n"\ - "Reason: {1}\n".format(self.status, self.reason) - if self.headers: - error_message += "HTTP response headers: {0}\n".format( - self.headers) - - if self.body: - error_message += "HTTP response body: {0}\n".format(self.body) - - return error_message diff --git a/api/client/test-requirements.txt b/api/client/test-requirements.txt deleted file mode 100644 index 2702246c..00000000 --- a/api/client/test-requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -coverage>=4.0.3 -nose>=1.3.7 -pluggy>=0.3.1 -py>=1.4.31 -randomize>=0.13 diff --git a/api/client/test/__init__.py b/api/client/test/__init__.py deleted file mode 100644 index 088cda17..00000000 --- a/api/client/test/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 diff --git a/api/client/test/test_any_value.py b/api/client/test/test_any_value.py deleted file mode 100644 index a65f2417..00000000 --- a/api/client/test/test_any_value.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.any_value import AnyValue # noqa: E501 -from swagger_client.rest import ApiException - - -class TestAnyValue(unittest.TestCase): - """AnyValue unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testAnyValue(self): - """Test AnyValue""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.any_value.AnyValue() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_access_token.py b/api/client/test/test_api_access_token.py deleted file mode 100644 index 87267ce3..00000000 --- a/api/client/test/test_api_access_token.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_access_token import ApiAccessToken # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiAccessToken(unittest.TestCase): - """ApiAccessToken unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiAccessToken(self): - """Test ApiAccessToken""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_access_token.ApiAccessToken() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_asset.py b/api/client/test/test_api_asset.py deleted file mode 100644 index 7544cf16..00000000 --- a/api/client/test/test_api_asset.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_asset import ApiAsset # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiAsset(unittest.TestCase): - """ApiAsset unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiAsset(self): - """Test ApiAsset""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_asset.ApiAsset() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_catalog_upload.py b/api/client/test/test_api_catalog_upload.py deleted file mode 100644 index 96251a64..00000000 --- a/api/client/test/test_api_catalog_upload.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_catalog_upload import ApiCatalogUpload # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiCatalogUpload(unittest.TestCase): - """ApiCatalogUpload unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiCatalogUpload(self): - """Test ApiCatalogUpload""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_catalog_upload.ApiCatalogUpload() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_catalog_upload_error.py b/api/client/test/test_api_catalog_upload_error.py deleted file mode 100644 index e1844423..00000000 --- a/api/client/test/test_api_catalog_upload_error.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_catalog_upload_error import ApiCatalogUploadError # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiCatalogUploadError(unittest.TestCase): - """ApiCatalogUploadError unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiCatalogUploadError(self): - """Test ApiCatalogUploadError""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_catalog_upload_error.ApiCatalogUploadError() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_catalog_upload_item.py b/api/client/test/test_api_catalog_upload_item.py deleted file mode 100644 index 37331562..00000000 --- a/api/client/test/test_api_catalog_upload_item.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_catalog_upload_item import ApiCatalogUploadItem # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiCatalogUploadItem(unittest.TestCase): - """ApiCatalogUploadItem unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiCatalogUploadItem(self): - """Test ApiCatalogUploadItem""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_catalog_upload_item.ApiCatalogUploadItem() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_catalog_upload_response.py b/api/client/test/test_api_catalog_upload_response.py deleted file mode 100644 index f31bfd19..00000000 --- a/api/client/test/test_api_catalog_upload_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_catalog_upload_response import ApiCatalogUploadResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiCatalogUploadResponse(unittest.TestCase): - """ApiCatalogUploadResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiCatalogUploadResponse(self): - """Test ApiCatalogUploadResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_catalog_upload_response.ApiCatalogUploadResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_component.py b/api/client/test/test_api_component.py deleted file mode 100644 index 1b137a8d..00000000 --- a/api/client/test/test_api_component.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_component import ApiComponent # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiComponent(unittest.TestCase): - """ApiComponent unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiComponent(self): - """Test ApiComponent""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_component.ApiComponent() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_credential.py b/api/client/test/test_api_credential.py deleted file mode 100644 index ca78f702..00000000 --- a/api/client/test/test_api_credential.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_credential import ApiCredential # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiCredential(unittest.TestCase): - """ApiCredential unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiCredential(self): - """Test ApiCredential""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_credential.ApiCredential() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_dataset.py b/api/client/test/test_api_dataset.py deleted file mode 100644 index 39db2085..00000000 --- a/api/client/test/test_api_dataset.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_dataset import ApiDataset # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiDataset(unittest.TestCase): - """ApiDataset unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiDataset(self): - """Test ApiDataset""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_dataset.ApiDataset() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_generate_code_response.py b/api/client/test/test_api_generate_code_response.py deleted file mode 100644 index aa2b7c99..00000000 --- a/api/client/test/test_api_generate_code_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_generate_code_response import ApiGenerateCodeResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiGenerateCodeResponse(unittest.TestCase): - """ApiGenerateCodeResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiGenerateCodeResponse(self): - """Test ApiGenerateCodeResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_generate_code_response.ApiGenerateCodeResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_generate_model_code_response.py b/api/client/test/test_api_generate_model_code_response.py deleted file mode 100644 index 374295b8..00000000 --- a/api/client/test/test_api_generate_model_code_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_generate_model_code_response import ApiGenerateModelCodeResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiGenerateModelCodeResponse(unittest.TestCase): - """ApiGenerateModelCodeResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiGenerateModelCodeResponse(self): - """Test ApiGenerateModelCodeResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_generate_model_code_response.ApiGenerateModelCodeResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_get_template_response.py b/api/client/test/test_api_get_template_response.py deleted file mode 100644 index e5c0bce5..00000000 --- a/api/client/test/test_api_get_template_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiGetTemplateResponse(unittest.TestCase): - """ApiGetTemplateResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiGetTemplateResponse(self): - """Test ApiGetTemplateResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_get_template_response.ApiGetTemplateResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_inferenceservice.py b/api/client/test/test_api_inferenceservice.py deleted file mode 100644 index a4ccd922..00000000 --- a/api/client/test/test_api_inferenceservice.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_inferenceservice import ApiInferenceservice # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiInferenceservice(unittest.TestCase): - """ApiInferenceservice unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiInferenceservice(self): - """Test ApiInferenceservice""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_inferenceservice.ApiInferenceservice() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_list_catalog_items_response.py b/api/client/test/test_api_list_catalog_items_response.py deleted file mode 100644 index 4e8d95f5..00000000 --- a/api/client/test/test_api_list_catalog_items_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_list_catalog_items_response import ApiListCatalogItemsResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiListCatalogItemsResponse(unittest.TestCase): - """ApiListCatalogItemsResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiListCatalogItemsResponse(self): - """Test ApiListCatalogItemsResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_list_catalog_items_response.ApiListCatalogItemsResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_list_catalog_upload_errors.py b/api/client/test/test_api_list_catalog_upload_errors.py deleted file mode 100644 index 37f4ed7b..00000000 --- a/api/client/test/test_api_list_catalog_upload_errors.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_list_catalog_upload_errors import ApiListCatalogUploadErrors # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiListCatalogUploadErrors(unittest.TestCase): - """ApiListCatalogUploadErrors unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiListCatalogUploadErrors(self): - """Test ApiListCatalogUploadErrors""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_list_catalog_upload_errors.ApiListCatalogUploadErrors() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_list_components_response.py b/api/client/test/test_api_list_components_response.py deleted file mode 100644 index d7984c85..00000000 --- a/api/client/test/test_api_list_components_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_list_components_response import ApiListComponentsResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiListComponentsResponse(unittest.TestCase): - """ApiListComponentsResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiListComponentsResponse(self): - """Test ApiListComponentsResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_list_components_response.ApiListComponentsResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_list_credentials_response.py b/api/client/test/test_api_list_credentials_response.py deleted file mode 100644 index 205c906d..00000000 --- a/api/client/test/test_api_list_credentials_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_list_credentials_response import ApiListCredentialsResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiListCredentialsResponse(unittest.TestCase): - """ApiListCredentialsResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiListCredentialsResponse(self): - """Test ApiListCredentialsResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_list_credentials_response.ApiListCredentialsResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_list_datasets_response.py b/api/client/test/test_api_list_datasets_response.py deleted file mode 100644 index a15a8b08..00000000 --- a/api/client/test/test_api_list_datasets_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_list_datasets_response import ApiListDatasetsResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiListDatasetsResponse(unittest.TestCase): - """ApiListDatasetsResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiListDatasetsResponse(self): - """Test ApiListDatasetsResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_list_datasets_response.ApiListDatasetsResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_list_inferenceservices_response.py b/api/client/test/test_api_list_inferenceservices_response.py deleted file mode 100644 index 50c368e1..00000000 --- a/api/client/test/test_api_list_inferenceservices_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_list_inferenceservices_response import ApiListInferenceservicesResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiListInferenceservicesResponse(unittest.TestCase): - """ApiListInferenceservicesResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiListInferenceservicesResponse(self): - """Test ApiListInferenceservicesResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_list_inferenceservices_response.ApiListInferenceservicesResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_list_models_response.py b/api/client/test/test_api_list_models_response.py deleted file mode 100644 index b862c1c9..00000000 --- a/api/client/test/test_api_list_models_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_list_models_response import ApiListModelsResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiListModelsResponse(unittest.TestCase): - """ApiListModelsResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiListModelsResponse(self): - """Test ApiListModelsResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_list_models_response.ApiListModelsResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_list_notebooks_response.py b/api/client/test/test_api_list_notebooks_response.py deleted file mode 100644 index 536558ee..00000000 --- a/api/client/test/test_api_list_notebooks_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_list_notebooks_response import ApiListNotebooksResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiListNotebooksResponse(unittest.TestCase): - """ApiListNotebooksResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiListNotebooksResponse(self): - """Test ApiListNotebooksResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_list_notebooks_response.ApiListNotebooksResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_list_pipelines_response.py b/api/client/test/test_api_list_pipelines_response.py deleted file mode 100644 index f72082ad..00000000 --- a/api/client/test/test_api_list_pipelines_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_list_pipelines_response import ApiListPipelinesResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiListPipelinesResponse(unittest.TestCase): - """ApiListPipelinesResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiListPipelinesResponse(self): - """Test ApiListPipelinesResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_list_pipelines_response.ApiListPipelinesResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_metadata.py b/api/client/test/test_api_metadata.py deleted file mode 100644 index f4bdd18a..00000000 --- a/api/client/test/test_api_metadata.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_metadata import ApiMetadata # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiMetadata(unittest.TestCase): - """ApiMetadata unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiMetadata(self): - """Test ApiMetadata""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_metadata.ApiMetadata() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_model.py b/api/client/test/test_api_model.py deleted file mode 100644 index 3e3a558f..00000000 --- a/api/client/test/test_api_model.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_model import ApiModel # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiModel(unittest.TestCase): - """ApiModel unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiModel(self): - """Test ApiModel""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_model.ApiModel() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_model_framework.py b/api/client/test/test_api_model_framework.py deleted file mode 100644 index 6fb01989..00000000 --- a/api/client/test/test_api_model_framework.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_model_framework import ApiModelFramework # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiModelFramework(unittest.TestCase): - """ApiModelFramework unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiModelFramework(self): - """Test ApiModelFramework""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_model_framework.ApiModelFramework() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_model_framework_runtimes.py b/api/client/test/test_api_model_framework_runtimes.py deleted file mode 100644 index a19ea7aa..00000000 --- a/api/client/test/test_api_model_framework_runtimes.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_model_framework_runtimes import ApiModelFrameworkRuntimes # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiModelFrameworkRuntimes(unittest.TestCase): - """ApiModelFrameworkRuntimes unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiModelFrameworkRuntimes(self): - """Test ApiModelFrameworkRuntimes""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_model_framework_runtimes.ApiModelFrameworkRuntimes() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_model_script.py b/api/client/test/test_api_model_script.py deleted file mode 100644 index 2f9ebfc6..00000000 --- a/api/client/test/test_api_model_script.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_model_script import ApiModelScript # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiModelScript(unittest.TestCase): - """ApiModelScript unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiModelScript(self): - """Test ApiModelScript""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_model_script.ApiModelScript() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_notebook.py b/api/client/test/test_api_notebook.py deleted file mode 100644 index a18fe0e6..00000000 --- a/api/client/test/test_api_notebook.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_notebook import ApiNotebook # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiNotebook(unittest.TestCase): - """ApiNotebook unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiNotebook(self): - """Test ApiNotebook""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_notebook.ApiNotebook() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_parameter.py b/api/client/test/test_api_parameter.py deleted file mode 100644 index d48c6e13..00000000 --- a/api/client/test/test_api_parameter.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_parameter import ApiParameter # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiParameter(unittest.TestCase): - """ApiParameter unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiParameter(self): - """Test ApiParameter""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_parameter.ApiParameter() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_pipeline.py b/api/client/test/test_api_pipeline.py deleted file mode 100644 index c182878e..00000000 --- a/api/client/test/test_api_pipeline.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_pipeline import ApiPipeline # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiPipeline(unittest.TestCase): - """ApiPipeline unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiPipeline(self): - """Test ApiPipeline""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_pipeline.ApiPipeline() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_pipeline_custom.py b/api/client/test/test_api_pipeline_custom.py deleted file mode 100644 index 93e95f4f..00000000 --- a/api/client/test/test_api_pipeline_custom.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_pipeline_custom import ApiPipelineCustom # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiPipelineCustom(unittest.TestCase): - """ApiPipelineCustom unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiPipelineCustom(self): - """Test ApiPipelineCustom""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_pipeline_custom.ApiPipelineCustom() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_pipeline_custom_run_payload.py b/api/client/test/test_api_pipeline_custom_run_payload.py deleted file mode 100644 index 055e1479..00000000 --- a/api/client/test/test_api_pipeline_custom_run_payload.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_pipeline_custom_run_payload import ApiPipelineCustomRunPayload # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiPipelineCustomRunPayload(unittest.TestCase): - """ApiPipelineCustomRunPayload unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiPipelineCustomRunPayload(self): - """Test ApiPipelineCustomRunPayload""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_pipeline_custom_run_payload.ApiPipelineCustomRunPayload() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_pipeline_dag.py b/api/client/test/test_api_pipeline_dag.py deleted file mode 100644 index 4e8d5f9f..00000000 --- a/api/client/test/test_api_pipeline_dag.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_pipeline_dag import ApiPipelineDAG # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiPipelineDAG(unittest.TestCase): - """ApiPipelineDAG unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiPipelineDAG(self): - """Test ApiPipelineDAG""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_pipeline_dag.ApiPipelineDAG() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_pipeline_extended.py b/api/client/test/test_api_pipeline_extended.py deleted file mode 100644 index be12d311..00000000 --- a/api/client/test/test_api_pipeline_extended.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_pipeline_extended import ApiPipelineExtended # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiPipelineExtended(unittest.TestCase): - """ApiPipelineExtended unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiPipelineExtended(self): - """Test ApiPipelineExtended""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_pipeline_extended.ApiPipelineExtended() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_pipeline_extension.py b/api/client/test/test_api_pipeline_extension.py deleted file mode 100644 index 8635a61c..00000000 --- a/api/client/test/test_api_pipeline_extension.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_pipeline_extension import ApiPipelineExtension # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiPipelineExtension(unittest.TestCase): - """ApiPipelineExtension unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiPipelineExtension(self): - """Test ApiPipelineExtension""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_pipeline_extension.ApiPipelineExtension() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_pipeline_inputs.py b/api/client/test/test_api_pipeline_inputs.py deleted file mode 100644 index 5fe4704d..00000000 --- a/api/client/test/test_api_pipeline_inputs.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_pipeline_inputs import ApiPipelineInputs # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiPipelineInputs(unittest.TestCase): - """ApiPipelineInputs unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiPipelineInputs(self): - """Test ApiPipelineInputs""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_pipeline_inputs.ApiPipelineInputs() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_pipeline_task.py b/api/client/test/test_api_pipeline_task.py deleted file mode 100644 index 5b8733d9..00000000 --- a/api/client/test/test_api_pipeline_task.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_pipeline_task import ApiPipelineTask # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiPipelineTask(unittest.TestCase): - """ApiPipelineTask unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiPipelineTask(self): - """Test ApiPipelineTask""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_pipeline_task.ApiPipelineTask() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_pipeline_task_arguments.py b/api/client/test/test_api_pipeline_task_arguments.py deleted file mode 100644 index 9895ca53..00000000 --- a/api/client/test/test_api_pipeline_task_arguments.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_pipeline_task_arguments import ApiPipelineTaskArguments # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiPipelineTaskArguments(unittest.TestCase): - """ApiPipelineTaskArguments unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiPipelineTaskArguments(self): - """Test ApiPipelineTaskArguments""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_pipeline_task_arguments.ApiPipelineTaskArguments() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_run_code_response.py b/api/client/test/test_api_run_code_response.py deleted file mode 100644 index 21816bd0..00000000 --- a/api/client/test/test_api_run_code_response.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiRunCodeResponse(unittest.TestCase): - """ApiRunCodeResponse unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiRunCodeResponse(self): - """Test ApiRunCodeResponse""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_run_code_response.ApiRunCodeResponse() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_settings.py b/api/client/test/test_api_settings.py deleted file mode 100644 index b2606acd..00000000 --- a/api/client/test/test_api_settings.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_settings import ApiSettings # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiSettings(unittest.TestCase): - """ApiSettings unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiSettings(self): - """Test ApiSettings""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_settings.ApiSettings() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_settings_section.py b/api/client/test/test_api_settings_section.py deleted file mode 100644 index 589e28e2..00000000 --- a/api/client/test/test_api_settings_section.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_settings_section import ApiSettingsSection # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiSettingsSection(unittest.TestCase): - """ApiSettingsSection unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiSettingsSection(self): - """Test ApiSettingsSection""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_settings_section.ApiSettingsSection() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_status.py b/api/client/test/test_api_status.py deleted file mode 100644 index 50111e77..00000000 --- a/api/client/test/test_api_status.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_status import ApiStatus # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiStatus(unittest.TestCase): - """ApiStatus unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiStatus(self): - """Test ApiStatus""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_status.ApiStatus() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_api_url.py b/api/client/test/test_api_url.py deleted file mode 100644 index 49840fc0..00000000 --- a/api/client/test/test_api_url.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.api_url import ApiUrl # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApiUrl(unittest.TestCase): - """ApiUrl unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testApiUrl(self): - """Test ApiUrl""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.api_url.ApiUrl() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_application_settings_api.py b/api/client/test/test_application_settings_api.py deleted file mode 100644 index 4c156416..00000000 --- a/api/client/test/test_application_settings_api.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.api.application_settings_api import ApplicationSettingsApi # noqa: E501 -from swagger_client.rest import ApiException - - -class TestApplicationSettingsApi(unittest.TestCase): - """ApplicationSettingsApi unit test stubs""" - - def setUp(self): - self.api = swagger_client.api.application_settings_api.ApplicationSettingsApi() # noqa: E501 - - def tearDown(self): - pass - - def test_get_application_settings(self): - """Test case for get_application_settings - - """ - pass - - def test_modify_application_settings(self): - """Test case for modify_application_settings - - """ - pass - - def test_set_application_settings(self): - """Test case for set_application_settings - - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_catalog_service_api.py b/api/client/test/test_catalog_service_api.py deleted file mode 100644 index 43c309bc..00000000 --- a/api/client/test/test_catalog_service_api.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.api.catalog_service_api import CatalogServiceApi # noqa: E501 -from swagger_client.rest import ApiException - - -class TestCatalogServiceApi(unittest.TestCase): - """CatalogServiceApi unit test stubs""" - - def setUp(self): - self.api = swagger_client.api.catalog_service_api.CatalogServiceApi() # noqa: E501 - - def tearDown(self): - pass - - def test_list_all_assets(self): - """Test case for list_all_assets - - """ - pass - - def test_upload_multiple_assets(self): - """Test case for upload_multiple_assets - - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_component_service_api.py b/api/client/test/test_component_service_api.py deleted file mode 100644 index 64fd0db7..00000000 --- a/api/client/test/test_component_service_api.py +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.api.component_service_api import ComponentServiceApi # noqa: E501 -from swagger_client.rest import ApiException - - -class TestComponentServiceApi(unittest.TestCase): - """ComponentServiceApi unit test stubs""" - - def setUp(self): - self.api = swagger_client.api.component_service_api.ComponentServiceApi() # noqa: E501 - - def tearDown(self): - pass - - def test_approve_components_for_publishing(self): - """Test case for approve_components_for_publishing - - """ - pass - - def test_create_component(self): - """Test case for create_component - - """ - pass - - def test_delete_component(self): - """Test case for delete_component - - """ - pass - - def test_download_component_files(self): - """Test case for download_component_files - - Returns the component artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - """ - pass - - def test_generate_component_code(self): - """Test case for generate_component_code - - """ - pass - - def test_get_component(self): - """Test case for get_component - - """ - pass - - def test_get_component_template(self): - """Test case for get_component_template - - """ - pass - - def test_list_components(self): - """Test case for list_components - - """ - pass - - def test_run_component(self): - """Test case for run_component - - """ - pass - - def test_set_featured_components(self): - """Test case for set_featured_components - - """ - pass - - def test_upload_component(self): - """Test case for upload_component - - """ - pass - - def test_upload_component_file(self): - """Test case for upload_component_file - - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_credential_service_api.py b/api/client/test/test_credential_service_api.py deleted file mode 100644 index affee9f4..00000000 --- a/api/client/test/test_credential_service_api.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.api.credential_service_api import CredentialServiceApi # noqa: E501 -from swagger_client.rest import ApiException - - -class TestCredentialServiceApi(unittest.TestCase): - """CredentialServiceApi unit test stubs""" - - def setUp(self): - self.api = swagger_client.api.credential_service_api.CredentialServiceApi() # noqa: E501 - - def tearDown(self): - pass - - def test_create_credentials(self): - """Test case for create_credentials - - """ - pass - - def test_delete_credential(self): - """Test case for delete_credential - - """ - pass - - def test_get_credential(self): - """Test case for get_credential - - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_dataset_service_api.py b/api/client/test/test_dataset_service_api.py deleted file mode 100644 index 6c429030..00000000 --- a/api/client/test/test_dataset_service_api.py +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.api.dataset_service_api import DatasetServiceApi # noqa: E501 -from swagger_client.rest import ApiException - - -class TestDatasetServiceApi(unittest.TestCase): - """DatasetServiceApi unit test stubs""" - - def setUp(self): - self.api = swagger_client.api.dataset_service_api.DatasetServiceApi() # noqa: E501 - - def tearDown(self): - pass - - def test_approve_datasets_for_publishing(self): - """Test case for approve_datasets_for_publishing - - """ - pass - - def test_create_dataset(self): - """Test case for create_dataset - - """ - pass - - def test_delete_dataset(self): - """Test case for delete_dataset - - """ - pass - - def test_download_dataset_files(self): - """Test case for download_dataset_files - - Returns the dataset artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - """ - pass - - def test_generate_dataset_code(self): - """Test case for generate_dataset_code - - """ - pass - - def test_get_dataset(self): - """Test case for get_dataset - - """ - pass - - def test_get_dataset_template(self): - """Test case for get_dataset_template - - """ - pass - - def test_list_datasets(self): - """Test case for list_datasets - - """ - pass - - def test_set_featured_datasets(self): - """Test case for set_featured_datasets - - """ - pass - - def test_upload_dataset(self): - """Test case for upload_dataset - - """ - pass - - def test_upload_dataset_file(self): - """Test case for upload_dataset_file - - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_dictionary.py b/api/client/test/test_dictionary.py deleted file mode 100644 index 5647c729..00000000 --- a/api/client/test/test_dictionary.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.dictionary import Dictionary # noqa: E501 -from swagger_client.rest import ApiException - - -class TestDictionary(unittest.TestCase): - """Dictionary unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testDictionary(self): - """Test Dictionary""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.dictionary.Dictionary() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_health_check_api.py b/api/client/test/test_health_check_api.py deleted file mode 100644 index 38f62f63..00000000 --- a/api/client/test/test_health_check_api.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.api.health_check_api import HealthCheckApi # noqa: E501 -from swagger_client.rest import ApiException - - -class TestHealthCheckApi(unittest.TestCase): - """HealthCheckApi unit test stubs""" - - def setUp(self): - self.api = swagger_client.api.health_check_api.HealthCheckApi() # noqa: E501 - - def tearDown(self): - pass - - def test_health_check(self): - """Test case for health_check - - Checks if the server is running # noqa: E501 - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_inference_service_api.py b/api/client/test/test_inference_service_api.py deleted file mode 100644 index 9022aa29..00000000 --- a/api/client/test/test_inference_service_api.py +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1.30-upload-catalog-from-url - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.api.inference_service_api import InferenceServiceApi # noqa: E501 -from swagger_client.rest import ApiException - - -class TestInferenceServiceApi(unittest.TestCase): - """InferenceServiceApi unit test stubs""" - - def setUp(self): - self.api = swagger_client.api.inference_service_api.InferenceServiceApi() # noqa: E501 - - def tearDown(self): - pass - - def test_get_service(self): - """Test case for get_service - - """ - pass - - def test_list_services(self): - """Test case for list_services - - Gets all KFServing services # noqa: E501 - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_model_service_api.py b/api/client/test/test_model_service_api.py deleted file mode 100644 index 1e8bd309..00000000 --- a/api/client/test/test_model_service_api.py +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.api.model_service_api import ModelServiceApi # noqa: E501 -from swagger_client.rest import ApiException - - -class TestModelServiceApi(unittest.TestCase): - """ModelServiceApi unit test stubs""" - - def setUp(self): - self.api = swagger_client.api.model_service_api.ModelServiceApi() # noqa: E501 - - def tearDown(self): - pass - - def test_approve_models_for_publishing(self): - """Test case for approve_models_for_publishing - - """ - pass - - def test_create_model(self): - """Test case for create_model - - """ - pass - - def test_delete_model(self): - """Test case for delete_model - - """ - pass - - def test_download_model_files(self): - """Test case for download_model_files - - Returns the model artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - """ - pass - - def test_generate_model_code(self): - """Test case for generate_model_code - - """ - pass - - def test_get_model(self): - """Test case for get_model - - """ - pass - - def test_get_model_template(self): - """Test case for get_model_template - - """ - pass - - def test_list_models(self): - """Test case for list_models - - """ - pass - - def test_run_model(self): - """Test case for run_model - - """ - pass - - def test_set_featured_models(self): - """Test case for set_featured_models - - """ - pass - - def test_upload_model(self): - """Test case for upload_model - - """ - pass - - def test_upload_model_file(self): - """Test case for upload_model_file - - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_notebook_service_api.py b/api/client/test/test_notebook_service_api.py deleted file mode 100644 index e4de5558..00000000 --- a/api/client/test/test_notebook_service_api.py +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.api.notebook_service_api import NotebookServiceApi # noqa: E501 -from swagger_client.rest import ApiException - - -class TestNotebookServiceApi(unittest.TestCase): - """NotebookServiceApi unit test stubs""" - - def setUp(self): - self.api = swagger_client.api.notebook_service_api.NotebookServiceApi() # noqa: E501 - - def tearDown(self): - pass - - def test_approve_notebooks_for_publishing(self): - """Test case for approve_notebooks_for_publishing - - """ - pass - - def test_create_notebook(self): - """Test case for create_notebook - - """ - pass - - def test_delete_notebook(self): - """Test case for delete_notebook - - """ - pass - - def test_download_notebook_files(self): - """Test case for download_notebook_files - - Returns the notebook artifacts compressed into a .tgz (.tar.gz) file. # noqa: E501 - """ - pass - - def test_generate_notebook_code(self): - """Test case for generate_notebook_code - - """ - pass - - def test_get_notebook(self): - """Test case for get_notebook - - """ - pass - - def test_get_notebook_template(self): - """Test case for get_notebook_template - - """ - pass - - def test_list_notebooks(self): - """Test case for list_notebooks - - """ - pass - - def test_run_notebook(self): - """Test case for run_notebook - - """ - pass - - def test_set_featured_notebooks(self): - """Test case for set_featured_notebooks - - """ - pass - - def test_upload_notebook(self): - """Test case for upload_notebook - - """ - pass - - def test_upload_notebook_file(self): - """Test case for upload_notebook_file - - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_pipeline_service_api.py b/api/client/test/test_pipeline_service_api.py deleted file mode 100644 index 0f10e752..00000000 --- a/api/client/test/test_pipeline_service_api.py +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.api.pipeline_service_api import PipelineServiceApi # noqa: E501 -from swagger_client.rest import ApiException - - -class TestPipelineServiceApi(unittest.TestCase): - """PipelineServiceApi unit test stubs""" - - def setUp(self): - self.api = swagger_client.api.pipeline_service_api.PipelineServiceApi() # noqa: E501 - - def tearDown(self): - pass - - def test_approve_pipelines_for_publishing(self): - """Test case for approve_pipelines_for_publishing - - """ - pass - - def test_create_pipeline(self): - """Test case for create_pipeline - - """ - pass - - def test_delete_pipeline(self): - """Test case for delete_pipeline - - """ - pass - - def test_download_pipeline_files(self): - """Test case for download_pipeline_files - - Returns the pipeline YAML compressed into a .tgz (.tar.gz) file. # noqa: E501 - """ - pass - - def test_get_pipeline(self): - """Test case for get_pipeline - - """ - pass - - def test_get_template(self): - """Test case for get_template - - """ - pass - - def test_list_pipelines(self): - """Test case for list_pipelines - - """ - pass - - def test_set_featured_pipelines(self): - """Test case for set_featured_pipelines - - """ - pass - - def test_upload_pipeline(self): - """Test case for upload_pipeline - - """ - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/test/test_protobuf_any.py b/api/client/test/test_protobuf_any.py deleted file mode 100644 index a7fffee0..00000000 --- a/api/client/test/test_protobuf_any.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -""" - MLX API - - MLX API Extension for Kubeflow Pipelines # noqa: E501 - - OpenAPI spec version: 0.1 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - - -from __future__ import absolute_import - -import unittest - -import swagger_client -from swagger_client.models.protobuf_any import ProtobufAny # noqa: E501 -from swagger_client.rest import ApiException - - -class TestProtobufAny(unittest.TestCase): - """ProtobufAny unit test stubs""" - - def setUp(self): - pass - - def tearDown(self): - pass - - def testProtobufAny(self): - """Test ProtobufAny""" - # FIXME: construct object with mandatory attributes with example values - # model = swagger_client.models.protobuf_any.ProtobufAny() # noqa: E501 - pass - - -if __name__ == '__main__': - unittest.main() diff --git a/api/client/tox.ini b/api/client/tox.ini deleted file mode 100644 index 3d0be613..00000000 --- a/api/client/tox.ini +++ /dev/null @@ -1,10 +0,0 @@ -[tox] -envlist = py27, py3 - -[testenv] -deps=-r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -commands= - nosetests \ - [] diff --git a/api/codegen.sh b/api/codegen.sh deleted file mode 100755 index d63ad7c1..00000000 --- a/api/codegen.sh +++ /dev/null @@ -1,212 +0,0 @@ -#!/usr/bin/env bash - -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -SCRIPT_DIR="$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )" - -UTIL_FILE="${SCRIPT_DIR}/server/swagger_server/util.py" - -cd "$SCRIPT_DIR" - -# download the swagger-codegen CLI if it was not installed already -if ! command -v swagger-codegen &> /dev/null; then - - # swagger-codegen requires Java - if ! command -v java &> /dev/null; then - echo "Must install Java to run swagger-codegen: https://www.java.com/en/download/help/download_options.html" - exit 1 - fi - - SWAGGER_VERSION="2.4.8" - SWAGGER_CODEGEN_CLI_JAR="swagger-codegen-cli-${SWAGGER_VERSION}.jar" - - if [ ! -f "${SWAGGER_CODEGEN_CLI_JAR}" ]; then - echo "Downloading swagger-codegen ${SWAGGER_VERSION} ..." - curl -L -O -s "https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/${SWAGGER_VERSION}/${SWAGGER_CODEGEN_CLI_JAR}" - fi - - function swagger-codegen() { - java -jar "${SWAGGER_CODEGEN_CLI_JAR}" "$@"; - } - export -f swagger-codegen -fi - -swagger-codegen validate -i swagger/swagger.yaml || exit 1 - -echo "Generating Python client:" -swagger-codegen generate -i swagger/swagger.yaml -l python -o client 2>&1 | grep -v -E "writing file|/test/" | sed "s|${SCRIPT_DIR}|.|g" - -echo "Generating Python server:" -swagger-codegen generate -i swagger/swagger.yaml -l python-flask -o server 2>&1 | grep -v -E "writing file|/test/" | sed "s|${SCRIPT_DIR}|.|g" - -# set interactive mode to enable defining a gsed alias -shopt -s expand_aliases - -# we use sed to make in-file text replacements, but sed works differently depending on the version -if ! sed -i '1s/^/test/' $(mktemp) 2> /dev/null; then - # macOS (BSD) version of sed - alias gsed="sed -i ''" -else - # POSIX compliant version of sed - alias gsed="sed -i" -fi -export gsed - -# we need to modify the generated controller methods to 'do some magic!' ... -# replace: -# return 'do some magic!' -# with: -# return util.invoke_controller_impl(__name__, locals()) -gsed "s/'do some magic\!'/util.invoke_controller_impl()/g" "${SCRIPT_DIR}"/server/swagger_server/controllers/*.py - -# and add the 'magic' utility method to forward the controller invocations ... unless we already did -grep "invoke_controller_impl" "${UTIL_FILE}" -q || cat <<'EOF' >> "${UTIL_FILE}" - - -####################################################################### -# non-generated methods # -####################################################################### - -class ApiError(Exception): - - def __init__(self, message, http_status_code=500): - self.message = message - self.http_status_code = http_status_code - super(ApiError, self).__init__(message) - - def __str__(self): - return f"{self.message} ({self.http_status_code})" - - def __repr__(self): - return self.__str__() - - -# cache results of GET requests, POST/PUT/PATCH/DELETE request will invalidate -response_cache = dict() - - -def should_cache(controller_name, method_name): - return request.method == "GET" \ - and method_name != "health_check" \ - and "inference_service" not in controller_name - - -def invoke_controller_impl(controller_name=None, parameters=None, method_name=None): - """ - Invoke the controller implementation of the method called on the parent frame. - - Example in :class:`swagger_server.controllers.component_service_controller` :: - - def delete_component(id): - return util.invoke_controller_impl(__name__, locals()) - - :param controller_name: fully qualified name of the controller, will be - determined via inspection of the caller frame if not specified - - :param parameters: dictionary of parameters, will be - determined via inspection of the caller frame if not specified - - :param method_name: name of the method to call on the controller implementation, will be - determined via inspection of the caller frame if not specified - - :return: result of the controller method execution - """ - import importlib - import traceback - import inspect - - # if not controller_name or not parameters or not method_name: - if None in (controller_name, parameters, method_name): - current_frame = inspect.currentframe() - caller_frame = inspect.getouterframes(current_frame)[1][0] - caller_module = inspect.getmodule(caller_frame) - - if not controller_name: - controller_name = caller_module.__name__ - - if not method_name: - method_name = inspect.getframeinfo(caller_frame).function - - if not parameters: - # caller_func_obj = getattr(caller_module, method_name) - # parameters = dict(inspect.signature(caller_func_obj).parameters) - # parameters = inspect.getfullargspec(caller_func_obj).args - parameters = caller_frame.f_locals - - # replace 'None' values with None, happens when client sets a parameter to None (a JSON serialization quirk) - for k, v in parameters.items(): - if type(v) == str and v == 'None': - parameters[k] = None - - # remove parameters with None values, otherwise the default values of method signature will not take effect - for k, v in dict(parameters).items(): - if v is None: - del parameters[k] - - module_name_parts = controller_name.split('.') - - if module_name_parts[1] == 'controllers': - module_name_parts[1] = 'controllers_impl' - module_name_parts[2] = module_name_parts[2] + '_impl' - - module_name = '.'.join(module_name_parts) - - try: - controller_impl_module = importlib.import_module(module_name) - impl_func = getattr(controller_impl_module, method_name) - - except ModuleNotFoundError as e: - traceback.print_exc() - return e.msg, 500 - - except AttributeError: - traceback.print_exc() - return f"The method '{method_name}' does not exist in module '{module_name}'", 501 - - if impl_func: - try: - results = None - request_cache_key = (controller_name, method_name, str(parameters)) - - if should_cache(controller_name, method_name): - results = response_cache.get(request_cache_key) - - if not results: - results = impl_func(**parameters) - - if should_cache(controller_name, method_name): - response_cache[request_cache_key] = results - log_msg = get_request_log_msg() - logging.getLogger("GETcache").info(f"{log_msg} added to cache") - - if request.method in ("DELETE", "POST", "PATCH", "PUT") and not method_name.startswith("run_"): - # any modifying method clears all cached entries, to avoid loopholes like delete '*', - # upload has no 'id', catalog modifies other asset types (represented by controller class), ... - response_cache.clear() - logging.getLogger("cache").info("Cleared response cache") - - return results - - except ApiError as e: - print(traceback.format_exc()) - return e.message, e.http_status_code - - except AssertionError as e: - print(traceback.format_exc()) - return str(e), 422 - - # TODO: this is for debugging during development, but we may not want to return details - # on just any error in production, revise this! - except Exception as e: - print(traceback.format_exc()) - return f"{e.__class__.__name__}: {str(e)}", 500 - - else: - return f'Method not found: {module_name}.{method_name}()', 501 - -EOF - -# change back to original working directory -cd - diff --git a/api/codegen_workflow.png b/api/codegen_workflow.png deleted file mode 100644 index d192b56b098cad117bfa7f772e20d528e6deb309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31384 zcmeFZbySpX)ILfHNEs*yiZqCn#DMgmC^;Y?-3>F8bcgtgg>(%mDXnyeMGoDq(%l{B z9tPj|e&_GsT4$ZlwZLKKd7iuXzV@}RJ+GfAN|O>%6JcRtk;=+QsbFE@#$sV%w-e%n zcdkA_LBSsqRu3OOk$w1(?umn)xs|mU7S^3m6GOwRG8}iBjEoEon^5d*L=LVhuU@@V zG4%aW-$vJ1-)h)S7ZanaJ9*>sB<|BMSgFblWeAdYbO(i8O}Y5$vde2l&(#Lt`!3CP zTy8J2ZeOrZPorSPotJ>d$LKzJ`lY@;2FsK^I{KR5ASbj`=1QkBbcf`!2+bFLTw_+r zL4tbtgXi)7OYG26sKaApqL5>}rheH6SCyoVA1+_Oc3~u!53qlT!^Mmnk)|HuXE}TH zyd|Y=>)q80(uRcTcim=~7w7NXpt?cDbI z77htXRUOYgLfc2LvLx_4thjK$`ujcqmLgS-d!z32wM?p;l7pioR5vs;k55m9Zq1p& z@L$#qoSvT6fWPZnZ`_En!`}A6#UgFc`>3tkgqVFy}a;el7! z;D;LgfXNSgiA4bZzY2b&l5zfgiW{4Z`{y-wJNiON)rYdO;D1#U2QxEUM@u^=){6>U z;8FcnPc@x1VG6<~b~ao_rgp|=Ty8e@=v%Nv-GsqQ8#5;(IyW0@TSs9xF^01%gu!d{ z+uRIvXO}o3#27STPv{=nIhfH2aNXm&#~@BbM@J{>U}`R`BK7$EcJP-NgQb&`y)ZYo ztE(%QD<7Agg9SH_kdP4fJzj2JUQTcYr=z>AlaU*zts^7mA%C7DW#(w&U}f)QWoJu= zey)+RowJh|0|UCDzyD$SY3642PfNCr=feU6nsgHXXJyWB z{`ZIHH;QtjNB*ywz)bVmyI`KhiA1^oUNdo`7^387SXfXjSt-e1l5Y$wDs!+ z&zi?g?FtJY?2MbPa>mIuz32Tkd`;Q6FeT*4;}=V@2{3h871M&Fj@`^nr&Z@?6|>^I z;vJj&HToT!@#`XWj_rr>zZT0F#6E?ET!vy{QiH8`i%DN!We!{a-RL=N=2&xf#ZS7+^Zt=vepbg{#TcEW%a+5%Sqh1w zL%&x`9tM&*oSt~cin!)CP7n*88L-QxIQ-G1ItFsmXEv!Gf%iD*HfInuWCMBl^YPiP z`~r*{pS3RAb<86RuF-XFwKTTC=)nWt6J0hHZjm*@^v|sh%RggR!er$#xRfvmOVZqO z>plhMHrngpwl0DW8%A&&{bjl)66~v5=evGV85;*B4I6xpHmP(ELYj5{7}pL?X!8E3 z)2&zF6Sq7p$&3MUZCet|6L$$OTUIv47NIS1A_FvJo=xe^qSVRce?ui0*PFaVvdFS>ZyR6LHd;tIylPhP~qLn_r9QG$+4GUDLH zif<%Wz%bi!lo^^l&t=sf0Qw@Ofc?Df)xK`|UCd{q+J4ZUR9affVDRA!IWS>Qy>7ij z4+pd#OitJ76;CpPZetbnWou=&bqw7xLb}WOpuL|h9nIh~fBP$7Rw!K*-<;j&w+hC0 z&|Wm7h`#SSUDK4ZdX_6;9Xu51CDFLb7qtW)Bm4b z&}6EWU_WAX`(G5m;My$NZeSJxFOdnX5EIP~dOV5jU==Dl-m{-?rr%(u#ZIm`;G$<5 zJ)6NHpZ++>Q8qA}iZ<iVXhE4 zde$jGUyMG;#r~O?yI}u4S$}p9vm(l0x0m8?osUoS0i9}wLU)dZQkgy?;*RnZN^m0L zA~{R>c6I#OMx=8B5BsqB+Y-}|*Mnr~;M+ePl4yjT2%|S0RM2nx&r&8=ENzZFW5Uen zdAokl%V6>7=yDm(HpAb)MC-65Xa4tUu=@X?tpAI1Vtd81CnKm032Eh={l$do!wYq= z?Teq^LZ5H2xo%wK&@Pri3fgfszNZOatvyt{tDbvjwj=3MYLPMrrr+&^z&8GtVLN+( zIL9Z`=CFGehYGR0vS~7*rUUtUg>LJ{&C%RRQg10Z71|$tz_fIq862Vrrs=bx@8v>U zqd1w>b2WJ_JL#lJ9cJ3tV)-nh_^rBSs@>MpbSoUf?kJ~7w?CU|x{{@m{-!OKPkNy* zhZVdIGyeXjxh0YvHtxLGFFW6zuD9rd4T}?qbXguA$~nU9xye`Hcrm`ac4m4fTX7z~ zB)K9XAwebNkoN68%}AG_DuTx(eyAw@;e^&qd4EgBxlAsHigAosGzSDzH-ZPu;rJbyrsmRh) z?Xry2t@9Ck@+qr9-%_O`QHyQ*`~opjGQcTSAgHg{X0eF zZLw7k(zzDnr|jh>e8?%;(D>aWvxr)qMSsH_Bqix43FSK+JVRnon;gj(B z7Yt^Yr7x~elMSB&k76l*N5z+MalBY-q23>t*}-)8SoyF=NunY#0KfWhcQu+rt1!k! zIYlb;N6^jIjp%CW=$)0aePN<_+<|E9* z>Syu95106|lv7{otm;U=tpR&F*>R>R^x;B(9-`E$XRslFK)&7wIjkT6HbLYuJ?;4|3!2?ELA!fX{Zv{gbxEoH)3h1NdD)SzXDc_ zX)yL#8d!N6qqKA9$MDjxy(eqa7#}9w8H}F<#ua%<;^^L-Z9m3C*aPR)!y`w8*(`Lw zh~{JpsSVZhb%!7cvfpa7^Uo}LefR}JUa|f8XUmuYYvO1-W-+$1$VV-GzOC(vKSuF?ul(Ox`m<*+8{_}l4pF9IZ+=J& z40OmXF^}Gd1t)c_iV=50-_c5()RA(W86GJ@e_)wp0?B9?zLmKBdi0U@BKpwQ7vZ6~ z6$`z>A`M_?RAWWm3yc1G`OxZsG6q<)*3k;buRoX0A{fF7DDaiv8c*jg3Q-7Q&hQ!( z8`WD^AD(4WSzR z%H9v6fL}Zg01krNv7#4T|xRK{o|`JRUpzb57B($k6f5E2^$H)I7#`{^nAi zcXTiP>x}Ai0pI=o(tVYwrU%L3MT`z6<~ZvY9S*qpaed&gDdsDd!dbFf|7w|TjUOPv z%!}>~J~%LLw^yS$;Hj72)z9~2nxT*ohowQD3eR2JdqRURFt+3nn5Z$k+guh*oqs}x z7q9DoeSgcWRcIQYhWWF!iZUw3pZ)&P9A;M= z3P42jbZazfN6d34#{1H3QTyY^!MF7`W>Dl9nkKMW*!mMe-ew`;fkKaM-H zkIKs6;ou`3XWA|{(@&i_fmd`mX#XhgeIV1FCTj+;MVNq%wxd~Jj#@apFQ*mJZ}IB- z9;fCfy3Xr}yxDxcDjXY=3m8}S>1r|yU#=;meFZiyiqI=omm0ks(98brn={R;b*Efo zRj#fVVq7Rl`A5p^xYvJuFA}Wq;nuIdlP(_}W!4&1QR=-jWTEoOP_k!9J#N(JczYn< zyEU3y@K8NZo0(ZYir<}xl8a+;pg_?5u39z|t5Rabb#`?b$YM1UW?P|`6~A}wgBcEt z)?;w=E{Iuz>Velo)jTbOa|FnTvnoYpsb-27$|In@dp`+;Tvy_U1RbViti~!!zP-8L z+WYQce_wWaxWsH{X~?_|zfiaVF;D5(?<}sJm}BYW7n&4 zfk5Jg9A_eUOn%_qRX_Cd+4~uoQg?E4l0l(HaHU&38OwC!R`yOvY8$X?)LO(2T zUhg9s!W)*|(mjm^__nmzcnsCh?5A065P0$p#>elZ^LLYcPeQ@recP`f&IKYLnS9*} z20`1=dnm-RSDD>J6t3jsx10vG)ipZ2rcH)XCG$2&ekZXY}*Sr@JS)8>P!KSL41U{F4bB!(0ZRvN5sR-tLV}k>S3*XywsE6`R)|npO zCoV(B0wDahDHMkH-r*xu`fU7Ns!GUuw7hF8ws%s6;5QYI@i+1ULGObtl?(-{{e_$Y z)2+F#!U;IT2*6+SqZLKEU|C-`;*U}Rlqlr2_en^6(j^LG=aQ9JR-ts*BAwRVX|KIb z_GgdYy3o<6qoc_+O1H!1GFZ5J!X?#H0~=OS;Y?WE%mTO7fcbD8vO_N z$`#hzpW70}s;HK?ts3!03pytE)_*(fENOMI6odUwRxTpds=evHIxZ#~LMQoZBOK!m z1o1vLZw1XBwYka$&G3akL)*7Wb!?h))@aCb(fy`}JOGRl)m7$= z%a$8t|F-eaS7_egn-t6SPYC|5bH)XOHSul(+qi$9s+52|+21_%anSRz#>Z$I;J(*W?d@?flg}roN97T~J~l_P zM-QQ7CWBRt&$g(a$b}fzo`hi|w|sPrS&%69&>260kCUnSL|)-v#KnuLdmCp1e&Jsa z!ilfRPv2ljv&nt1#gitu9?%Q{&~0ClNJb<4qSal94SfLWANpTmeBAV&M#S{wXrC(# z1We84&wfwsPWVP2?Qgc0um5J&XpeW8Zn@3|j=9r(_oLd=6VIUv$IM%zZcpAP-KS5L z4hrkb(P-UX97wn9O6e{%lSfCaY>rb+p&P%0C6LZ~z-km8t$n?;G48oqv0?e6(s@y? zEr!QzrY$xfVRW{B^}BeMT#KF^@gk4WUUiKDoAfI19=GP+3%jmxFv~@R;FD4}At8t~ z-JwF3`fA77_ZMZ*zDPcbBNTKm_BXsQmyMW`i+}%cdyy4@ldx>HoR+_cDceqfrEZBf z@L}_a-?`HFoBvaSfDLl7+M`Xwz?&I(VpkgzOcw+%fGvxfZPzOGILk2J-3{U6?TTZpC0d~gSUX44}&53Lrogr%NCk8 zw+S30(WlmKd^8uKrS0hfZ1-y#kL*vvjXekuM>>+K&fw141OGSI*(+DF zRnq0m_d$4>Zv#M!0CtA$D+*2|ASjyf;+99sD8)+Av39{2!G!oHqpvS_Qi|byEgZlH z4j%cef2UN*)#QQm>OJ5C@f=D+;e4=-~y6VYazgOS*J`i$5(Bl(r86M6FY&M z&tWR?^!?K8ti^^@(7^=lK8VYlXfh$O0CeSeA3evxo53|i2C-D}>(dqMv=GjA*F zaN3-f`;*;-INxOOjAortKywTP(QkOElcgY2DMSc*;#77JS45K>w+ z^Ujlg*jKsrMXh>2hK^RdZ-yReKg^OPxGd~A^Uivx@DaXdqouI#Nj07gFT&;Muy2%_ zP$ocuRIX$qa|gwQ3Amvl%_3-<3V;Y6<$e1}zv|dAj%u0= zeY#vE?>^+!(awk+49jh?pR)*ME0@DAoGzOn?5wb=9C++b~oEy8S4gU$gfHha~6yM`9bTmH!6JA^f$`R+At+K?940kBV`41(&7CN z7DQu(@}N)RO5t+x_n&=&gcDP6giQDxq7<~k*fqGwpDxskTeK%aU`DKp@pld`a)I;I z6#tOmm>x5*WMG-92{4w{?E`dUs`-%wJ&e0{FJ-P#QFy^R;~mvxeVLd{P!PlDJh|u8x6M z46o{0le`$fkO8Z~*mV6F)mi&j9s!7-B6=|&7h{|+U6n}^uOZOmj6S2!Cl&nz`5;xB z@AN(LsrbyL%0st-F=3(NHC3{4Lqy84DjJ>(H)?kB+m7C6)2l4jt#<1wS?o@i zR{^}#z^KV$e_nVLrw)=OpSrwuyI&{6<>{r)-&=dY9Lb|;!^GhdL|nbg-r7%d-lbbY z4l;m3n+9O)Swg@$?{?mW`UEhoWR?@v?y4*>B$MN8dnB+J1Uf1Bi6X8m5y1Xc?ksNX zERQe)nkEHh>wLp4!F4IYb({xfTX(R)ZZ%$A(d>J;W8-*q)2^CcBVRYvV|yXi1ejGe z;V%Y}chwZ^57!%MTfv#poi+TAuf1%aiIv(aoUE6n!mPoj9d|>wTf6BRn@S8_k@w*a z%Uk?dK$nC92C8Me#uFAa*A&XA7qESFwAsOHGh7V)-uF@Yp*bKSOZ93z)XY&xX69oQJKN%(e*2EA>e?q`fdJxBunJwN5Wt5IWyM)2dCes53zLDrC2oOx^ z8U_01LQ09E8+E709lbAChKi&Wlf*gW1nqpL7WnB(R6#6)G6tIgWw$i=nOVQuZ38&F z5v{#Pf0{U(+0naz4HI+_wCesA4@2BrHZOwZc3DD}C+a48;qPfB#_3?e0z;`cvvU2UEZZ#12aB6Zm5y;$L!RQvVHGSxFN%oYOxpB$&x zRQSV^t-^$tFJjwW9xQiBCzxucNhL0ab6)q%HXCJ_B=4THyCxJ2WJ>6F=$K7B{lnJRmz*q^1^SW*Du z67vWx8pw_rf=QdE)1vpIvbk@C!?f;xv0Y|Dv4Mqs^SJFPesrJ>VY$3v&n5QhYzTux zu>VPS-l@H+<4|^w2=CF?dGkYagv1%9JX@f8PrQ@2n$@$33~dQ>_2Sa+Z(Vc}1AzP< zb_N;FH9m8Nf!e9&@Hl@z{(HysnMtO=n5Lw50*tF(d$=Of^Fm!ZoK*8r$bJ&qWrN)V z$kM6QU~%5KVu7tGS@>(5gHKC7{=~B#vEe`7To>$Ymex}m?Kj`^y?a=LqY@L4ErP`6@(B*^W?hs$dWV{SED)ZT7I1_?N(KbGU2Jkr ziSl_BBwSW?u!R0^iXf9L*b_Fmc*Fpfc%O(uF#5=+`uqrUHKy7;n>cWJE5Y~)8t1_#ZHkM2QX zg)V)9Dy4FquPG(`o9kTqRQ9(=*}|m*noh=sN~kcI7O zdBjn?c_?%J_!j((6*)?_RJSwa;s~#LUd+VJXZKf1kPr%+p=5zG01cg<( zuC%nH7Sr^@OEdcIM_xiU9&FuUndDIW32|IrCAnqRr|rZ1HE+1tpd&FX;LtU08PGl< zHwW@#H=pL}ci_cTKEy?R`QFkLJR%V5C4FgGu$2k1eyfr-#0_}EEI7R1U($HU(w$?{;kZr zTO>PUT>L`?fql%{9`*>agS3&S6t(uz&h~;7)%t9!2zl8jRcoi@UMs};x*XTvGPBLj zto$oY-NwWxe0Eu2dn(~QY-%tRH;hYF-Mtmgi^xQ16vTW_-faA#6w=ggd?6$nRcLTc zVxaVe`o7D-;cDO^pc%~VcI3lIFWpFMH8PrQo=9hia-HNgX3iQGn83_*4?54;jMe5_)p@=f*l?tbIK`rC$ zf@&*>0jF|l;oPfc30esTgoY2}c3f$w>oF~UL8juZlDDBu>J`YX>gCEEzSiBia)>kn7C*e zFfcF%M4;e%>sA4d#rm3 zo?3Oc=6siH&7L-BZDTW;E>|AB&x1oU?BNk8)YXSk!KntaPw<&o5yQ=skZufC= zq6V#-ROb5*>KbelS2;RdBNQJwEPUhH|GhiWCX;_Lcc15Bxb1i~eIpr7NUo56)LfUr zy+;ZA`{mU!ye0Ab`!Q0!^cjG5e{4HZW0N62-(Ok_`PfObZ~ud#!n)7x#9_vwc}s}7^ma$0Fn!&zhhn$3zg6M2tOt(GMn1Wx#gV)@r(dCB zZAuhx$SoaBXirmFuX)_U2wkAxC?}JCF`n@KBDzBO8Jek>@T~*cv5tg%SpZZ4syg?x zNuvNH&NUZ{T{OJ^a;@ow7vJSHLOStdJZOjOHmAKV=z);8hq?uj3OX>|M){%vxuz2_ z5hj4*3yqt-v`VZ)r&@HNMa^mm!=#sLM6HAL-c#c>RSpeA495gcg5D4KELyEL=A!W* zYMVEtq%(N=%~x7d{K4-2_7sMbN%lTii9QDauJRDd;d#AMPJLYRJkyh9u(x${cQ=|* z`n}AQ^(kug1~&J|XZeMVcF%q%=9>ydx>cP-YKZ2=1kc#MUMoJCz_P=Zsn4`cvppUE>Jq{7!_lg7U&8)O7dBozImq<4 zhlO1xboDawhdZ2ndzWDM9_BQ!|LybmaNcn(zGFcuplj(qF*r`E z$t*oW@^TNb{0;FAT)p+8IAS=39A~2+=LyGl>1c4ovgT-Tgtns)OPw^~^K zi~|e%(lu~9E-iKRJHJfATcc$ocrj?_J#SDDIRFr$9Au%jJc~H((P92Z>rhXj>9~SY z1x-HrADaxN!vmoiJ(PhMFoa3v zYm#DRNgg+AFbz?J#n6CbI>4jp9_zPw%UvyEO;F)OIgWf9iEk;}ksNtqclyT)S(-KPt;arTzpObdwH_(&U#j!j&gRcn(GI*D7WHutQ zl00;fb|58f9-FXxD!t3D6EGl)zKC!&EAFa#}htj&t4`<~C8)v#$IENJX(+o4ZEK9 z;d%_bXHr4S5qbPC$PDtN^PN4xGqbD()f;aVV(v9W!~g=bIflpNQ#vIQrlz8PtR?8Da!&69l66~f0kPWNXY4G8>gx3LWn%hMj+Y*I0^{3(m!G4a7Y1ZUts(Rer2^W+nB`l52Ugfe zXFfslQ0DaH7}hiT;4dPyxGX&|GU)}>jrbb3UYG8dO!C_T{-kbVo8~Zq9A*#)@z3+c zP21emAZTMa%sq+L_ME3gb+m*lyDSeHAD2CAjkH)iSk-H_>apN$WoCaG>3Yl>tCaMC zRxY=EohkNuHH-VY5muE+tH%HjK)xmkCRK>B+V?JY+s={e9?|1h`?!%ziU%p|2K5&b z2qG}qp)37ht*MK;99=M*>$FACqLM=OKYMT8m2) z5_(h6HUfC@rqh#M39HUzf3^&GUv`GND&hg4Lg(&!0A?_ZZ}#hnp>}u$AfpGwDJ~Oo zV=t3e7_W=Q@|eXR83nazf7aG}eVx6OO4H(C>T`y#Y2M4cwrR7rqp&_#hwN*2RJ6Oz zo0ujzV$9%@o@BR-b`Z5R>UFKktGf|1{adVy8k~{tMW?fsCEby5nG~aAvzEb2Oz>XI zFi|z?*yCn5Eu$d3!>+9YX0TONawLiO4_c{sJ?y!AdR;z4yjy+-9JWnLX+KH$acOqz z)?jJ^0K5f9-qYOsrbh%02ffb_HDw4U-2vJ2tSg!(ag*|++q`mh*S6E|34*W0-DarJ zEFGu{(aJtqpyyZ`JN%S{v@HuKre?H-mW}X-L^-#VZ}8jp$x@ds829J&SuubR zk&;xgE@u4`#nau6{Wc`acOtsqS}==7uZ{GrrCzD=`N40uQjd8KNvIi_TQwkytJQ*X zE8|s&mQDx#mXpGWJ36w8x4Z`n=?p%k@EYz(^L})t94cNh;H61B2Q;qy_Yec)gI}7G$)CGCfy0+LAbcn z%S_19#BMK^98UGVe&{e=&>A+Mev8GvxIkxOab@*De$z#7dMPVBtdHoj$@kZc-Y-R$ zCUW=rWsYnYp9y(Pu~xVrBiV!Xe*Cp*k*>On&1<@KI<+%4a6r9?kD#=M|@+l~N=O?tws#yUCmdRNl%jnhp$>?EGF7C-3RKlV?o<}mv z)_Nd6VW<%V<}Y-UTSZo7IoSQI)r-=uHQngo&&hjI5>-83q0vN4&-y2H_p2wrV99kT zb=$%PKKT(6(!jiYCJoKfC`d$i{kfM)-%8#IyiD;v{B zzoFoS34W%1-Em{RT{BU;2vy6`7$vI$v;f@C?m)Udd8!)!dR8K zs$5s2db3pJfs|p)&0G;J;6LY}z^ig;z%Pom&u|D!7y^~#sN3WJd4Y!COySD*jP<{6 z0xY)%7=Xw2@9CL;!U*)MU9b}>2jYtUCi2ei(&q%wq%Sx+?qBLE(A80N`GLM&`^*3I z$gKqA9x#t~ds^>1+#)Slh!GEA0C*r;LHa!H2A-&-q55fdqJ69`6 z9sT}450yg8wO;K=mEZn**P@?R9{{kh*xt`)^ZywgREm6UU;HdV3UcaF#k0S722y?g zWronVQoP!#m)jw#!`%6z1g(5~A>r{wJ9gtdB9j2Zx0gv`7H7%6zZuO~UBYV8dIT{6W z2P9NXW^byzbp(n(W}Q-N^Fx4FOt%;Mc-__vWkJ#q2)fjYZ^3p7w0{04gXyJS&l=FS zzd0L6Pz#jnK${Vym9L+N9If@%$xuvy!}*r$TXZJgl^_OMK;keRq`(T@H_i7qTDjAK zG{E0h191ixyLJ9`I6pQeGjg)knI$Bsw9ET+jt-ZeH@O%QRFic2>ygX?eK z(q8nK>!cr82j(#1CF#u;AZKI-=}3?&DwDvX`S>l5L4fVj(?33fSBQGCO|kDIhPI z$}1bcN~#Z;$C3i8B#52ffBOVXK3W3Pl~DsqLHOL^1Nodlh!-Z}YTJdSfvZ5OeTi1w zdM8QLy}S2bsb$xLUyZ?b&$Wseo1&vKVP*!N%MjT(fjrA_%{8)wSlCLTbE)SB2Dj+jCuCx9cHu-Oi*Bav_mOT9KN7jXQn3J3&c`2eAstY)HWm);`P(n6|uJW&E9J zeRDJ1AD2K5gu@E@$J9Xd!R9;N63J5EhkQ!<9P+WJ7|1NTpc({=UEavzBT54=W%2zf za*&sQHW<)GR?^=+nP6q#Qt zZC+mw^%tBAL?G!5lHV*7=zQ>U*@S@q3`lyzo@k~>T_opUSl138s`d61a$bnA9w|jt zKcW6;1lIvqBK4&mXL?s|9|VWHv?daI#OhL@JreXj(VlKd7ItJmKHN{E!ojRLPOxC# zlCHwA0SAp&EMZCbvD8yms6@TE!3@|)L`cSc%QvXg=TD-sUhvTy(AKcInmdp$8_-f}GlEaO*SIu!wnp`t7anWr!3g=i z53Wzn03YVh3i_Xl*K1$3}6qeN5ux< ztAXUFh`Y{25g?y1tg!w8WwD$Vuw{AhGmy5ez~>ks)cj#Zy^aw201D?19#~ic-_YL$ za8cj+g^tL)(2^-Zm`6LCYDP?Oq7s4^2yTolJQoURG~s!R7ZINr4mbNW3}Q`6F7jZq z#{QWX2mNPyHa-J^D{#oWcwSshy~9GwZ$Fl}3q#v8U~z3w0pWT@Jw&lOY$t*S6hQG{ z$M4hut*0s|RZ$2^;#zDfKo(Ox2^Y{219~AUuf~-Tx056Hq5`!Xb(UAX;z`1T!DI`m zFz02{-QeDg{9$g@xDCbl`(5LlCGbAp*)E~G&Xrg4Wcz#{^_$m$M5gn!XZLdf_db@- z)SU}W71-hVi*(S<8I)tt$D8&Ntr#zk2Wo3c?tVFw{rH{j5kWB^Nkv0esy%7M9p{$I zq&I+G5&oQG*}{s|6N}D9Kc|^Yz}cty+iUVTn_+A9O!BUo&tR|DDbP$xB5st>W{}0C z9t$}q-=;ySw|0uh4C@Zqo@C>019t1%7IvSNf|Eyh|0!91Dr5J;ozmg>-Gl8#bL3UA zI{egOFOAu~-fKb|;k21FPZ0Jr{8npuJ^6FJOu|jdGU2zS&%ouH9ySha!h2^_2<+{( z`~EWO%l!e3%Ue6k(Oi1GjK^a@siN<_t;Sa)W4W?lHsQmk8Z~z-l6uX`0L9lIA5WEs z{E91a%=9_eP&uv(9}77JJA zfpzl<1v`VcMflNcfsQ`$&`N{Zm0p%2Vb=^AL-=EwNOc1CZYwpyd!#fNj`0fAj~Yd| zcDWo6>_EEbgnLdQ^X(SND2tLEmAF~>rpB^o79y-n=DsnLB;&KtWurD%#|U zN1S_XQAtn(OrCgk09`iyqQpxSua?}BNMW@% z0zb!qP!s6Jg`tMV-nNgUXf0cPp==H*=O1-z&>y0LVo46hgVEcr*HS?>HIwT z==@F7=JCxd`OKp{=NW>6E1=F7Dcu}|eoP0`q^ji1vm7PUu9Qd207$76n##HlA>mTe zFZz^q$0FO~g-jm5J>Ke3La{+Q`)Xr{PaVK1K^GD>14%MtbgF8$rG!#K%A+0tD%vXg z{LgzXf=9?d_MuG(fH(hF%%Bx>KE!)o(kUmVfr8otIe?z-4il(IyY;a>8Vya64z|TV zmW{vvS!k>*p>s?e=4qukG0 zp`YZ#J+&ksLaX|LybES;wF$~9$9t{0G(SN>L5-muSp@w}l+OIS&G8rLdgYe;>G|?lxC;3>&(ciG{|H@ zE7BB@{LM>sZtE#p1^~B_(29@7OS@VEoy<-XAPC!ZV_Ax}(?QhgY$=2`hy!TlY7t-? zN4kN=olWyovgKNKN!0JgV8KIvOP|%6-L^vf4g=rgl3d-2?)ceg17FApq`q&a!XtM) zQ-FT_vq>OOM|f~@Y8QtniSK`l*V$CdQhC&#B(d7UXV!A^QfWF0#0e41y4ZIY0Ol??dJ=EPBg07gj3V}aG zi}%r@{0!eIP+>?n+nx{(WYB27q>Tpx@4bi8x}@pNUm{z;lAu%s^~c!&(z7$cG+HMJ zM7XjbkJfhLb9@ks7-0ESIo8pkROzyOm)a0s0rp*X^O<`$MO9@rd`LX}vAviQKsql5 z3MfYL+CafYh{Wkp4_>Yd)ca`fS*(y_h9xIrtkM|`>{(8MJkO}5&#w@C-2+QZzfT^U zN?HhLea!ioh5S5|fp-}=48H~jv{_5X5%19za9J8G1W2wc`3YiXD-{$ES!a|g20&3J znIJHV^OGHL)PcMzP%E%~E`_S=U69^isakCTvQ&i~peBsLeo@>8z;2A6+NSp=N|0p@ zR9+?sb)Z$)ZtK5x*c3>U`?*#CK*9^mr#a=aT+5Ly&;h2;X^iMHfQ`bz*NFW`ui zn=TY}BWnO1{91r~%y_#)*QQSs?6isADVxDhlC{S>Is=S(Pd+?HRK%;LX2~M%o&uLr zlajZBK`V|-M6u5LxwkYl#MGEug3h4D+1N66N*?yl-FtB2LFh%Ep_u4my(@+}D z9^sAYK$0u_^(Cnpp!!q%69i&OtqNBeC7Hdj`4&e_i;^GKzo>6J$CmM9scOO1T;cuK;_u7Tu?co%h}g{({72b!sc&p;o_ zbIekr?%W*4obdw$$R)g>vWgAJYhS(Xh+qqEt^)9PfQOPx_p-Bx3e2=#TV-3f$fLw6 zKW8^*(*bUukFq(hYknaGrjtqTtR_uVzTV<_8(QEBeIl)zAm&+Wb&!pccg9nrseeq+ zaPj^|u7GP_sCo(hQ)&A?I+a64`0@vQl>mZE0*(lHNQN0agp$=(7nD=Iq2jkZKG@Dk zN{{MFm#6FrRwih7k4p2VfmofkfHZH*yff0>}HEENz}ZK zDXN1)!Iy8iUqX`-t5?@z#bbfrjs^l{c@T`FYZUS`Kb8ce<9FPhash4PVFk5J{H`<@ zv~KSgF<)O`K4LNp^>jN`7WWCwv0B_DygN(QrzGQI*SyqLIH*2BmodP6s+2OumU>Sh z1lk6b`Kev-?s`ptLxKfn`!?rF;G`+|--J_g+H1eCbDwo1dv@z zgPE1MsI?Mu-S<|ZS^`da;%cXF?#5>ck2c(X3MNovva=VMmuG$S^^=a&CB!v1B@+IU z?;$7qIlhVT=xYfQNc2$mvi&+P#434qVh6NMJ}=Cq>F`10Cx2GJlZp?qrmT`K(y6Xa zgyVoEv_p2yILm$VlhuLEmy^1%r}!P76$Di4)mt2xdK?B!ouIb?D3+nXuA0wf9SwE~ z?7~vb-00?FHSpO_r?Sy6s{s`XiT1>2)aPV5x*AW$`L;sB_`^eGjItx15{Mk!Rb8Xz z-Xj$beMCPzR;?Ph?6&3HDZelbk*;c)>$MyNc8=Q!%XA$v9$eI1}+vHU4%jPQ(Ujo32;0VeB~d+X3I_%uwH_%pWqL` zUvNjCYCizHc+Y_sI;NY9y};m+tObhk_+YW^NqH!<;H3LTE6Rta?J+!GA#?h`exN?C z32PdXw(L)m{VZGA zX=HtXI@_GzLoA6bCe3Ui*^9b&fgcWF%)L!GNU*f4k)dnUpqhYD7RddJ?JUTo3jujb z+-Gj1Z~9ZLdY-su0&9R|s~q(n&rDE?`wGwd4fy-%mh4TdMShE6R#gPmK%NdOx@@E* z4vT~4Uje;_GjBuAfs+`so4P(Xq`nBg za0ApU01;@W!0ew)M8TELWaYTp+o0MU&q2HAqc_M1PjG|f4+UVduh$rEAP1AoeJhUTE(7T2(ZB!^8k!=OSi3Boc2x;~4;?{g zN<$g`(z>+54suc{-uFw)x6lO~dD;+nP+kR7=Ttqk*jb%0P{~xZDNPXf9ws4*IGPY` zh-^j|rk|Jl&D=U`6yOqP9Dt**&?H*`dN_ln2vBe{t^iM)M`+rR>Ev1}J5EqPf!6}4 zAq!I3rhvQ2xHJtavfWeOl8yEN{dKs-S_pl9warK=WYZCR1IG`N8)+r!4|9)!<>y<> ze|J{r^^*>iKa$P;`JOO5QG@!9jt-K-RP3bpBssJ&mU0gDwqDy|m|=-;1{r=Dtw;wb z_e-l(6WLEogCtR#!h;7Swjdo5+g749K;1GpSp~dz) zxPWPv_uC_ntoqy&wVJK=@;pDFcfy8Xik8rZDNz!NV0PXb044ybEtO!WgAjDiZ}XE4 z_yW9PGhi0mu*8N*)HjFOCb6J90>>~Afr+}U(M_@p6q3E{O_L=bLep{deMmJ@FNoOu zeGTj@P9HQDiLPw5l;?I5?J0TgU1Ipa8TgyA7Gy=f`99XA$E-1-ls)z`rPXeb*JwH% z>m&BZa5liksBBHJR47Ktqbu~GmUyB$q>n6DB1|x->&%j(f1Q8HfYATQGKhe|)o$ii zsGh~Ue}2)mf%y4rd<^+{RD8b2Y8inp{ohyH7u5q$(Dtzil&3^)QSr*iA?{v9$9j{? zKx6E2NIr9J%b|3-c#q%Rp#NNxgiZqD~+h35jA z51q0ACrwZafVMDT1_R$Lg5W6{@bb-Imp@b^BS2R{DqaM6GB(+kzl(5AuE$9D)@pUv zbAxc*yuzad?f@(ksDRAQLbXM4-qZ(k>!(2kj$CALWZd~7_g}kqAIPbMyo)WnaP%Gn z6N$t7WposZ*-Z z62-|5k{OY3^|fp(Ano~o+Pm(5D%`ldyk&&6Ls7GXHKE`A3 zEqm4DsbiJB3YCnLmF*zk&wUP0kMHaICwzZ9uj9Dy>%Q*m`druN^B&g{WGgjGrO-}N z{}>nnZfHm2y*IO{PcZj1MS>Dbf zD+Cp%e(%*~oZDFz(gKX5?S2as2~M2#045IDM+rAl8(I})lK5W~vf)_=9)>w0^OX&~ z^qB~8`V;n>hN3)p2(fk7I9qQ*xkJU6mY&tL+Y9j$5+3u^fc(eW$WzYD<>fTr2keQ- z=hrs#7;J0_zYoy!1M$S~b;;5;;rha8BuGurotzgZW^*X}o0NC2`P`)eryH>EQ$ji# zH_$~`QylNREQ}gC`47Pz6EcgS+z<`L&_D_Lu$_x537Q;9G6*4C>jf%uK+!B_b&T65q+5iDfCz-0k?Y9j2BsuA z<-T#(+rnX2E@7A-D152;QBOb+74HZn_3Q5&kc2+I6EwJJ1S(f~0BhwX^gEI%A}*sk zdI@pia06jG#k`QuW?zF_fT?#|)De@u;$2q#r-WB`b>yAXgpyYPXqF*QFu+N{7H#|x z$Rb=JlvbP>0bexpb-M)Kt<2UgHRKJT@&V1`cf5x{I6@DH5&sAQ!35_5Q9i+$?BaO9 zy3FNbj4Evtuc-bxXwwsJ2^@#d{a}kyHV4z|5zO5(niZwCkLfD*&i?x9?}>$Wiq#8^ zt1nBCV3jI=z0HuVZtebG3aBI_AoUD&h!Ens#qSnTd6AKB7O2AGyxoT1*+IyTfHaCf zR#`VWW+~ao6b32W>l{)@pyJS0=0ml!YUOH%XWvO{1vQ^?qcUgTr3kZpWN;*>QzB{~>SLErDq&2M{V=9v#cFa)3r_(It42NyX zQ^ns3sRUHn%e*t;$!otJ0J+~?E52Uaki^AqN(?pgMie#j^5Q^&&+#fmAVu%4obxFs z9muVG7MNRwbv4DaKdPC1obv+b$43**JIe#RapcwiC6KaNY8)z!w$ZJB^UC6948P&j zgOQZfeB+YA3OnpXS9h6)#wM!S24T=%#onv2raMMjB?B-zZR?*ndPLI?V*S@PmR1=c z9Hc_6$Ab_B4U0bbas8w0@z-JW6~(CO@MT)4pAiWFp%76*DnOE|oC2%$Tm1_K3>;86 z8w9&Ged|mWL5080eWbWAwY?}qDPr}p%6-+U+Iy$wf}VDAV4_oD8;7<^e8`PFFCGAf z*$|*B=M_jozVtRfb>iv(CB7o;(>j)WulowvHLULT4-HUk@|z=1r%Z;7`|mHwqTr@?)T4@`mC!CRZZTd>qs;hXiK82MBm`BuXX;B zDf;$B%d&E$fyBJbE&-qUwmmwUG1O^}Uv@hci!LVkY}VHuz+6P)U0+ikcJAKa<*h}G z2EzH#cNZEsM}!Imx13LjnkI5Pr*)&EYDOUt2q{uaM2G?&U-3Y@3~n@h8hMx7jz^`4EV;phk6*JbAD#L z{;^!a6wtE@RM@x>P{&%$J*aV-nN`^qqfgl-y$xV9WEjC`s{TIyS~ihxx#gUR(_D`y zQgEwVd~>YuAvW|Fb(JI=lS0Hq$&_2SLqi?+ZeEMo`&c!m=+&`V7Rv4KtJpK?wf@faSZ;^NYnDu`fyI2sm;y2?8svK;A9=vlMaykW`b^+g|Tuz1&G zTv}Z3I{k5E<8dk`6}Nlwy!G36FQ??_c^k<>?$6894^(tOPo4pMuFTg<3g+M)(j-vU z8?I6zm6Zw0juPlr(;;3mXZH>Zs(@ykrx6x)-bPP`aSlR3>hdr|ZSbPtow7+gyWqw5 zf#05Im<$Yt)g)vBrjDNOTt9I#v zQzMmU*`3^hLJo304b+^|#3F;^1MYsasT-^_S>EBPfxdn?#I%CQw3bwjweuO66 zvx>b>%kZ#!+r@GF)vGbpu0HFyx0niyd+SF^$5C|j)7@=!nMhP(vKo=1jBj{*_w6iY zWSimVOBoBsAk($F)P@*wXX@e^&0Zi#yAz6MU97k4VO9&L-kzMAQnInh7d?0S^yQhE z8I-|G2-yjaVgb?qz6nHPPILF;6T+jf>~5^clyOfESUWPc#k1#mm}lx9TYhl##EB9@ zv`2nUenNguVL`#Vd7DCzctl6V9I-)$vtpP0)CsMi(Spww1^RhC_ZnM`IMaUBRw9JW z-KeqrbzyP+9!F=)+(gzT{$nR3cQTN6563VCivNa`2V51P)$wrldK}?1U&-T3b7M=-o&0 zDyLEhfIf<+lY&PTD!V@J2srQljQ|=-H8*k+XV@U0g*y|N(&bhJoG?fpu zsO*2eb3W5?S>i`y>nowkzVIVrED9Rd)YkWwB$f&*UZRgEO|>$rsYbY1&MdjCQI&oC zC}fR&n3pcpZ&miay)4zbH(IKGM@Q5~rGS>VxK{Z*zvl3^PM1$5^(QNLY|90879ry# zy4_f(y0SpMj2z!UTGI1# z))5Vd;}R3SN|bcI|2f~X0g3R7!qc^=4(hHsl@(eg5BE~lmtdom{eTCPxY7X5sj+j) zD_(jgDsgdfC@mwC0=m_jYXqOw)J_yOX-Hw?#Njx!ko~*LBq#qoRh2*bijZ$0A;!%GIBu*Q2N0M|XO61ICu; zT!z+nTuq%?Jp$yj)b`4v>doyoP~=H`0d-bOp=nLHf3MDxZjaR`TJ6Cp?`_5_EWrZ z*One!3T4xwF}2#ndRwG1cU&XLOzNR%G|@#@;}$PjHZ&LLO=0TJ z-s#5yJB!h@1yt)wt@_xZJ|DKu6hgtuOOUk|$yq{T z7;uFA@q|Jdca~}!)G|`_0)?0=(pG4+12n2o+DGFyFCzm&{5zxW+>N0{gZ zS#f{@@5u&yDPeqHP!B&J-%`Y5&zT#>#+MBEH`JdS-ZgTP z();}N)_P=L`W70q^>?$wjLwGHZncq4V4qZsB9<#lHGqj>Jd`ll412%mjs-qj^u9%Z z^{R4eTAGjRkEqz#^FLz_X(S8-s$Pb!<8paJw=48<$3U>D*UWA+ZGjvLk#GO}b_A-| zjfWWHevLgZ-%HG(^n8q9VaH7HW3S~%P0UrmhzOM+q&8vH^btFC+>>nNOIt3m{GbXh zJU_xy8k~_J>(cEy@tc@$D4%WFvGAT#5>hn^B*f zFBK2ZyL|@|06LGCVz@Ym|2zChk{xorG+LPoB*ENEq2ZGc75KQnGfwN=yAnR*^$mqs ziGA?yHs|kO?oyGSBxB3n7$WwqGq}sWNO}4VHer;D=14RQ6w_6ff`3aUr&!JX6kiny z3l3J?A0Zapv>iCexZiiBF}6OM}PDXn7ueK(uh7GXB$K(WhNfH#9?@jlk^$~kD?hr3r(wB5tuu` z`y`?{Me3Y#{J+;7FC}8`)OFC?d=F?-145jy^^)oMcdY1;wYMrdYk62+CG=x&avGAJ z(;GfW^an4b>nOGqjf0N%r?R0{e#2$u2l&aSScwTn(N~F`@J@5~$Uf3Z5lXIpu`9@p|_CakWtc1LFT`Hhpg>Mo|ktR_!aGpm!uaB}Mv%j11xnr;d0ed3^p9eO zhCs$%mo|MT?akF{Gvl~=H7X^A-q91Pnt?$g}I>me;K|Hm~jU+)G+>L!#gIw}yGJ;(=OcVK*(k&%g$Qw6v+U#p9NP`}j9 z|KUCOQgy5Xi8f)T@(B5*m5EKDH+NJ6t3A#UesZS12+A#|FJ9z805HD-?rUu8ra5scI!P6Q@kQ$2};l5>xkn*`!aTYfg5<`F~Pydm$QLOV}vNil0BCK!M1BK zI2tf1O@T4z0V5W~>lLcMXeepQKJ5WUSp1d%Y5%$$m>OV=V3UE&Y(rKUpl?*O(75LP zVoK?`>)h+m{De5^g|&Uwg2l;;LhZqP-q@L}h}hT%a>7vBwOg9;5*~F+LodHM#_je5 zOaWcvJpia+prD}Wu6yjbIsTNqU811i&>CQVkx(OP19tPxk{uZ=(%a-*N5ozMSGW4wRD>RfwG?lIta8ziCgS)#JLFNtoSzE!A%uu>Z!zAe5!I-`Y1ylw@}j}53{X3J44iA?Ri6}UWVcs z{;xUaGi$6at(~1hBhiCn&Q1uO`i#-f{sy&13lwTtZv%HL`)UY-Z9W7KB#|KFyGsfl z{_lb>W3(^V)c@hi^Puv^dOO@FO)uqERd?Gl{6T$}2xk+fR5eKB(tnq8`cq91stG<-3!K=G(zsr**M~L3(xLU>N3MK&|HnMj`+DO!f@;o>?V*OT5Jo&VWPL1{@jj4v>Yg1$Hv8?77YP&I zDh=P6()n3eeOx90?_BK7Ak3hiH{$bEGB97+;AECUi@*7~xKx2>%mR^K(9c3sGYWM7 zs=zZbo9~id0$aP7Cr=0i|M+83z8)BZN#TmL5{bfgNx%Y+366EYiFfrX+`I7{g zwL29TR?82oiIXSeM$-I| z>!t>(BcM#mUGEsFWmwMjoQCzB1=OCm3><;Ae{v$-xxohyuk+aq79X>E44h&``^9Qu zlP6D}C`;=B??ORYSpa-h4Qrfo$PR%%$hPzGnB#zvtAf6M{54>SPll4DBl8k!+X;Or z%G0M`y!v7k`0NC=JZzTC0dL_mZ924|M1y++Rl4-=vFBR(xoo9W@W%|$(-S*UsgIS| zm=Zq`t61Gt0(u6&LG-j_EVVzzg{5|VHe6rO`UOc*j3RY9rhapCGp6;;W897|20=RV z-&*b^RXQ@#I(dEdyyChZHW(*8IliK2>>rT8KnQRYKMyusdvDRm_6;%hUg^38ey`#P z_h>M0P)wifC@zjID!~3TdG;(jeuoa0@Ux$)HJl8hva?yo3Rx>~KeC4-5qcaR9X*&B z5bBJ7ig5B9k<&jIRO!c&W4B~JQtbyGd^D=M4i`C5uY3_de((_tj%`H}ttXl15ALB) zKm@j(HXlYr2>7SK1vCUZJtffc`y1qwEpj-J40n&*!Amf}gFR1SBRLqupF-0vy2s&o zufMN+5_(pQNQL+JH}J{#B9dr*Y%9ly%l+%vBdG(!gBQP3Z{$%vAvxeP0|G$fo hsew#{lVsa;e`!dW)(_I9BWDyV+*Fk deploy-api-server.yml - - -# check for existing deployment -if kubectl -n "${POD_NAMESPACE}" get pods | grep -q mlx-api; then - - NODE_PORT=$(kubectl -n "${POD_NAMESPACE}" get service mlx-api -o jsonpath='{.spec.ports[0].nodePort}') - - echo "The existing MLX API server is listening on nodePort=${NODE_PORT}" - - # get the API service IP, the existing API service may not have gotten deployed on the same node as the PUBLIC_IP - for ip in $(kubectl get nodes -o jsonpath='{.items[*]..addresses[?(@.type=="ExternalIP")].address}'); do - curl -X OPTIONS -m 1 -s "http://${ip}:${NODE_PORT}/apis/v1alpha1/health_check" \ - && export PUBLIC_IP=${ip} \ - && break - done - - EXISTING_VERSION=$(kubectl -n "${POD_NAMESPACE}" get pods --selector=service=mlx-api -o jsonpath='{.items[*].metadata.labels.version}' | head -1) - echo "Existing version: '${EXISTING_VERSION}'" - - NEW_VERSION=$(grep version deploy-api-server.yml | grep -vE "^#" | awk '{print $2}') - echo "New version: '${NEW_VERSION}'" - - if [[ "${NEW_VERSION}" == "${EXISTING_VERSION}" ]]; then - echo "Same version was already deployed!" - read -r -t 10 -n1 -p "Continue redeployment (y/n)? " key || key=n - case ${key} in - y|Y|"" ) echo Yes ;; # hitting ENTER without typing "y" will suffice - * ) echo No ; exit 1 ;; - esac - fi - - if [ -z "$PUBLIC_IP" ]; then - echo "PUBLIC_IP is required to backup application settings" - exit 1 - else - echo "Save current application settings in file '${SETTINGS_FILE}'" - curl -X GET "http://${PUBLIC_IP}:${NODE_PORT}/apis/v1alpha1/settings" -o "${SETTINGS_FILE}" -s - fi - - echo "Deleting existing deployment..." - - kubectl -n "${POD_NAMESPACE}" -f deploy-api-server.yml delete - - if grep -q -E "^[ ]+nodePort: 3" server/mlx-api.yml; then - - echo -n "Waiting for pod to be terminated" - - while kubectl -n "${POD_NAMESPACE}" get pods | grep -q mlx-api; do - sleep 1 - echo -n "." - done - - # add some extra sleep time to make sure nodePort has been made available again - for i in $(seq 5); do - sleep 1 - echo -n "." - done - - echo "done" - fi -fi - - -echo "Deploying MLX API server..." - -kubectl -f deploy-api-server.yml apply - -# if we failed to deploy, delete and exit -if ! kubectl -n "${POD_NAMESPACE}" get svc | grep -q "mlx-api"; then - - kubectl -n "${POD_NAMESPACE}" -f deploy-api-server.yml delete - exit 1 -fi - - -echo "Waiting for pod to be ready..." - -end=$((SECONDS+30)) - -while ! kubectl -n "${POD_NAMESPACE}" get pods | grep -q -E "mlx-api-.* Running " ; do - - sleep 1 - echo -n "." - - if (( SECONDS > end )); then - echo "timed out" - kubectl -n "${POD_NAMESPACE}" get pods | grep "mlx-api-" - exit 1 - fi -done -echo "done" - - -if [[ -n "${NODE_PORT}" ]]; then - - echo "Setting nodePort to ${NODE_PORT} ..." - - for i in $(seq 1 5); do - - kubectl -n "${POD_NAMESPACE}" patch svc mlx-api --type='json' \ - -p "[{ \"op\": \"replace\", \"path\": \"/spec/ports/0/nodePort\", \"value\": $NODE_PORT }]" \ - && exit_code=0 && break || exit_code=$? && sleep 10 - done - - if (( exit_code > 0 )); then - echo "Error" - exit ${exit_code} - fi -fi - - -if kubectl -n "${POD_NAMESPACE}" get pods | grep -q mlx-api; then - - if [ -z "$PUBLIC_IP" ]; then - - echo "PUBLIC_IP is required to initialize application settings" - else - - API_PORT=$(kubectl get service mlx-api -n ${POD_NAMESPACE} -o jsonpath='{.spec.ports[0].nodePort}') -# API_PORT=$NODE_PORT - KFP_PORT=$(kubectl get service ml-pipeline-ui -n ${POD_NAMESPACE} -o jsonpath='{.spec.ports[0].nodePort}') - - # wait for API to be ready - end=$((SECONDS+30)) - - echo -n "Waiting for API server (http://${PUBLIC_IP}:${API_PORT}/apis/v1alpha1/settings)" - - until $(curl -o /dev/null -s --head -I "http://${PUBLIC_IP}:${API_PORT}/apis/v1alpha1/settings"); do - echo -n "." - sleep 1 - if (( SECONDS > end )); then - echo "Curl timed out" - exit 1 - fi - done - - echo - - if [ -s "${SETTINGS_FILE}" ] ; then - - echo "Re-instating the settings from the previous deployment" - - curl -X POST "http://${PUBLIC_IP}:${API_PORT}/apis/v1alpha1/settings" -s \ - -H "Content-Type: application/json" \ - -d @${SETTINGS_FILE} | \ - grep -q "sections" && echo "success" || echo "failed to re-instate previous application settings" - - else - echo "Could not re-instate application settings due to missing or empty file '$SETTINGS_FILE'" - fi - - echo -n "Initializing application settings with host and port..." - - curl -X PUT "http://${PUBLIC_IP}:${API_PORT}/apis/v1alpha1/settings" -s \ - -H "Content-Type: application/json" \ - -d "{\"API Endpoint\": \"${PUBLIC_IP}:${API_PORT}\", \ - \"KFP API\": \"${PUBLIC_IP}:${KFP_PORT}\"}" | \ - grep -q "${PUBLIC_IP}:${API_PORT}" && echo "success" || ( echo "failed" && exit 1 ) - fi -fi - - -# show deployment results -echo -kubectl -n "${POD_NAMESPACE}" get svc | grep -E "NAME|mlx-api" | column -t -echo -kubectl -n "${POD_NAMESPACE}" get pod | grep -E "NAME|mlx-api" | column -t - - -# delete temporary deployment YAML file -rm -f deploy-api-server.yml - -# delete backup settings JSON file -rm -f "${SETTINGS_FILE}" - -# change back to original working directory -cd - > /dev/null - -command -v say > /dev/null && say "The M L X A P I server was deployed successfully" diff --git a/api/examples/catalog_api.py b/api/examples/catalog_api.py deleted file mode 100644 index 85593982..00000000 --- a/api/examples/catalog_api.py +++ /dev/null @@ -1,177 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from __future__ import print_function - -import json -import swagger_client - -from os import environ as env -from pprint import pprint -from swagger_client.api_client import ApiClient, Configuration -from swagger_client.models import ApiListCatalogItemsResponse, ApiCatalogUpload,\ - ApiCatalogUploadItem, ApiCatalogUploadResponse, ApiAccessToken -from swagger_client.rest import ApiException -from sys import stderr - - -host = '127.0.0.1' -port = '8080' -# host = env.get("MLX_API_SERVICE_HOST") -# port = env.get("MLX_API_SERVICE_PORT") - -api_base_path = 'apis/v1alpha1' - -catalog_upload_file = "./../../bootstrapper/catalog_upload.json" - -IBM_GHE_API_TOKEN = env.get("IBM_GHE_API_TOKEN") - - -def get_swagger_client(): - - config = Configuration() - config.host = f'http://{host}:{port}/{api_base_path}' - api_client = ApiClient(configuration=config) - - return api_client - - -def print_function_name_decorator(func): - - def wrapper(*args, **kwargs): - print() - print(f"---[ {func.__name__} ]---") - print() - return func(*args, **kwargs) - - return wrapper - - -@print_function_name_decorator -def upload_catalog_assets(upload_file=catalog_upload_file) -> ApiCatalogUploadResponse: - - api_client = get_swagger_client() - api_instance = swagger_client.CatalogServiceApi(api_client=api_client) - - try: - with open(upload_file) as f: - upload_items = json.load(f) - - upload_body = ApiCatalogUpload( - api_access_tokens=[ApiAccessToken(api_token=IBM_GHE_API_TOKEN, url_host="github.ibm.com")], - components=upload_items.get("components"), - datasets=upload_items.get("datasets"), - models=upload_items.get("models"), - notebooks=upload_items.get("notebooks"), - pipelines=upload_items.get("pipelines")) - - upload_response: ApiCatalogUploadResponse = api_instance.upload_multiple_assets(upload_body) - - print(f"Uploaded '{upload_response.total_created}' assets, {upload_response.total_errors} errors") - - # print a short-ish table instead of the full JSON response - asset_types = [ - "components", - "datasets", - "models", - "notebooks", - "pipelines" - ] - for asset_type in asset_types: - asset_list = upload_response.__getattribute__(asset_type) - print(f"\n{asset_type.upper()}:\n") - for asset in asset_list: - print("%s %s %s" % (asset.id, asset.created_at.strftime("%Y-%m-%d %H:%M:%S"), asset.name)) - - if upload_response.total_errors > 0: - print(f"\nERRORS:\n") - for error in upload_response.errors: - print(error.error_message) - - return upload_response - - except ApiException as e: - print("Exception when calling CatalogServiceApi -> upload_multiple_assets: %s\n" % e, file=stderr) - raise e - - return None - - -@print_function_name_decorator -def delete_assets(upload_assets_response: ApiCatalogUploadResponse = None): - - api_client = get_swagger_client() - - delete_methods = { - "components": swagger_client.ComponentServiceApi(api_client).delete_component, - "datasets": swagger_client.DatasetServiceApi(api_client).delete_dataset, - "models": swagger_client.ModelServiceApi(api_client).delete_model, - "notebooks": swagger_client.NotebookServiceApi(api_client).delete_notebook, - "pipelines": swagger_client.PipelineServiceApi(api_client).delete_pipeline - } - - try: - for asset_type, delete_method in delete_methods.items(): - if upload_assets_response: - asset_list = upload_assets_response.__getattribute__(asset_type) - for asset in asset_list: - delete_method(asset.id) - else: - delete_method("*") - - except ApiException as e: - print(f"Exception when calling {delete_method}: {e}\n", file=stderr) - - -@print_function_name_decorator -def list_assets(filter_dict: dict = {}, sort_by: str = None) -> ApiListCatalogItemsResponse: - - api_client = get_swagger_client() - api_instance = swagger_client.CatalogServiceApi(api_client=api_client) - - try: - filter_str = json.dumps(filter_dict) if filter_dict else None - - api_response: ApiListCatalogItemsResponse = \ - api_instance.list_all_assets(filter=filter_str, sort_by=sort_by) - - asset_types = [ - "components", - "datasets", - "models", - "notebooks", - "pipelines" - ] - - # print a short-ish table instead of the full JSON response - for asset_type in asset_types: - asset_list = api_response.__getattribute__(asset_type) - for asset in asset_list: - print("%s %s %s" % (asset.id, asset.created_at.strftime("%Y-%m-%d %H:%M:%S"), asset.name)) - - return api_response - - except ApiException as e: - print("Exception when calling CatalogServiceApi -> list_all_assets: %s\n" % e, file=stderr) - - return [] - - -def main(): - - # delete all existing assets - delete_assets() - - # upload the assets configured in the bootstrapper - upload_response = upload_catalog_assets() - - # delete (only) the assets we just uploaded - # delete_assets(upload_response) - - # list the remaining assets - list_assets() - - -if __name__ == '__main__': - main() diff --git a/api/examples/components_api.py b/api/examples/components_api.py deleted file mode 100644 index 84c31f6b..00000000 --- a/api/examples/components_api.py +++ /dev/null @@ -1,382 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from __future__ import print_function - -import glob -import json -import os -import random -import re -import swagger_client -import tarfile -import tempfile - -from io import BytesIO -from os import environ as env -from pprint import pprint -from swagger_client.api_client import ApiClient, Configuration -from swagger_client.models import ApiComponent, ApiGetTemplateResponse, ApiListComponentsResponse, \ - ApiGenerateCodeResponse, ApiRunCodeResponse -from swagger_client.rest import ApiException -from sys import stderr -from urllib3.response import HTTPResponse - - -host = '127.0.0.1' -port = '8080' -# host = env.get("MLX_API_SERVICE_HOST") -# port = env.get("MLX_API_SERVICE_PORT") - -api_base_path = 'apis/v1alpha1' - -yaml_files = glob.glob("./../../../katalog/component-samples/**/component.yaml", recursive=True) - - -def get_swagger_client(): - - config = Configuration() - config.host = f'http://{host}:{port}/{api_base_path}' - api_client = ApiClient(configuration=config) - - return api_client - - -def print_function_name_decorator(func): - - def wrapper(*args, **kwargs): - print() - print(f"---[ {func.__name__}{args}{kwargs} ]---") - print() - return func(*args, **kwargs) - - return wrapper - - -def create_tar_file(yamlfile_name): - - yamlfile_basename = os.path.basename(yamlfile_name) - tmp_dir = tempfile.gettempdir() - tarfile_path = os.path.join(tmp_dir, yamlfile_basename.replace(".yaml", ".tgz")) - - with tarfile.open(tarfile_path, "w:gz") as tar: - tar.add(yamlfile_name, arcname=yamlfile_basename) - - tar.close() - - return tarfile_path - - -def upload_component_template(uploadfile_name, name=None) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - component: ApiComponent = api_instance.upload_component(uploadfile=uploadfile_name, name=name) - print(f"Uploaded '{component.name}': {component.id}") - return component.id - - except ApiException as e: - print("Exception when calling ComponentServiceApi -> upload_component: %s\n" % e, file=stderr) - raise e - - return None - - -@print_function_name_decorator -def upload_component_templates() -> [str]: - - template_ids = [] - - for yaml_file in yaml_files: - # tarfile_name = create_tar_file(yaml_file) - # template_id = upload_component_template(tarfile_name) - template_id = upload_component_template(yaml_file) - template_ids += [template_id] - - return template_ids - - -@print_function_name_decorator -def upload_component_file(component_id, file_path): - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - response = api_instance.upload_component_file(id=component_id, uploadfile=file_path) - print(f"Upload file '{file_path}' to component with ID '{component_id}'") - - except ApiException as e: - print("Exception when calling ComponentServiceApi -> upload_component_file: %s\n" % e, file=stderr) - raise e - - -@print_function_name_decorator -def download_component_tgz(component_id) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - response: HTTPResponse = \ - api_instance.download_component_files(component_id, - include_generated_code=True, - _preload_content=False) - - attachment_header = response.info().get("Content-Disposition", - f"attachment; filename={component_id}.tgz") - - download_filename = re.sub("attachment; filename=", "", attachment_header) - - download_dir = os.path.join(tempfile.gettempdir(), "download", "components") - os.makedirs(download_dir, exist_ok=True) - tarfile_path = os.path.join(download_dir, download_filename) - - with open(tarfile_path, 'wb') as f: - f.write(response.read()) - - print(tarfile_path) - - return tarfile_path - - except ApiException as e: - print("Exception when calling ComponentServiceApi -> download_component_files: %s\n" % e, file=stderr) - - return "Download failed?" - - -@print_function_name_decorator -def verify_component_download(component_id: str) -> bool: - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - response: HTTPResponse = \ - api_instance.download_component_files(component_id, - include_generated_code=True, - _preload_content=False) - tgz_file = BytesIO(response.read()) - tar = tarfile.open(fileobj=tgz_file) - - file_contents = {m.name.split(".")[-1]: tar.extractfile(m).read().decode("utf-8") - for m in tar.getmembers()} - - template_response: ApiGetTemplateResponse = api_instance.get_component_template(component_id) - template_text_from_api = template_response.template - - assert template_text_from_api == file_contents.get("yaml", file_contents.get("yml")) - - generate_code_response: ApiGenerateCodeResponse = api_instance.generate_component_code(component_id) - run_script_from_api = generate_code_response.script - - regex = re.compile(r"name='[^']*'") # controller adds random chars to name, replace those - - assert regex.sub("name='...'", run_script_from_api) == \ - regex.sub("name='...'", file_contents.get("py")) - - print("downloaded files match") - - return True - - except ApiException as e: - print("Exception when calling ComponentServiceApi -> download_component_files: %s\n" % e, file=stderr) - - return False - - -@print_function_name_decorator -def approve_components_for_publishing(component_ids: [str]): - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - api_response = api_instance.approve_components_for_publishing(component_ids) - - except ApiException as e: - print("Exception when calling ComponentServiceApi -> approve_components_for_publishing: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def set_featured_components(component_ids: [str]): - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - api_response = api_instance.set_featured_components(component_ids) - - except ApiException as e: - print("Exception when calling ComponentServiceApi -> set_featured_components: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def get_component(component_id: str) -> ApiComponent: - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - component_meta: ApiComponent = api_instance.get_component(component_id) - pprint(component_meta, indent=2) - return component_meta - - except ApiException as e: - print("Exception when calling ComponentServiceApi -> get_component: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def delete_component(component_id: str): - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - api_instance.delete_component(component_id) - except ApiException as e: - print("Exception when calling ComponentServiceApi -> delete_component: %s\n" % e, file=stderr) - - -@print_function_name_decorator -def get_template(template_id: str) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - template_response: ApiGetTemplateResponse = api_instance.get_component_template(template_id) - print(template_response.template) - - # yaml_dict = yaml.load(template_response.template, Loader=yaml.FullLoader) - # component_name = yaml_dict.get("name") or f"template_{template_id}" - # template_file = os.path.join("files", component_name) + ".yaml" - - # with open(template_file, "w") as f: - # f.write(template_response.template) - - return template_response.template - - except ApiException as e: - print("Exception when calling ComponentServiceApi -> get_component_template: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def generate_code(component_id: str) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - generate_code_response: ApiGenerateCodeResponse = api_instance.generate_component_code(component_id) - print(generate_code_response.script) - - return generate_code_response.script - - except ApiException as e: - print("Exception while calling ComponentServiceApi -> generate_code: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def run_code(component_id: str, parameters: dict = {}, run_name: str = None) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - param_array = [{"name": key, "value": value} for key, value in parameters.items()] - run_code_response: ApiRunCodeResponse = api_instance.run_component(component_id, param_array, run_name=run_name) - print(run_code_response.run_url) - - return run_code_response.run_url - - except ApiException as e: - print("Exception while calling ComponentServiceApi -> run_code: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def list_components(filter_dict: dict = {}, sort_by: str = None) -> [ApiComponent]: - - api_client = get_swagger_client() - api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - filter_str = json.dumps(filter_dict) if filter_dict else None - - api_response: ApiListComponentsResponse = api_instance.list_components(filter=filter_str, sort_by=sort_by) - - for c in api_response.components: - print("%s %s %s" % (c.id, c.created_at.strftime("%Y-%m-%d %H:%M:%S"), c.name)) - - return api_response.components - - except ApiException as e: - print("Exception when calling ComponentServiceApi -> list_components: %s\n" % e, file=stderr) - - return [] - - -def main(): - # delete existing components - delete_component(component_id="*") - - # upload all templates - component_ids: [str] = upload_component_templates() - - # list all components - components = list_components() - component_ids: [str] = [component.id for component in components] - - # set featured components - set_featured_components(component_ids) - - # approve components to be published - approve_components_for_publishing(component_ids) - - # randomly selected a component - i = random.randint(0, len(component_ids)-1) - component_id = component_ids[i] - - # show one randomly selected component - get_component(component_id) - get_template(component_id) - generate_code(component_id) - - tgz_file = download_component_tgz(component_id) - verify_component_download(component_id) - upload_component_file(component_id, tgz_file) - - component = list_components(filter_dict={"name": 'Create Secret - Kubernetes Cluster'})[0] - generate_code(component.id) - args = { - 'token': env.get("IBM_GHE_API_TOKEN"), - 'url': 'https://raw.github.ibm.com/user/repo/master/secret.yml', - 'name': 'my-test-credential' - } - run_code(component.id, args, f"Running component '{component.id}'") - - # # delete one component - # delete_component(component_id) - - # # update a component - # component = list_components(filter_dict={"name": 'Fabric for Deep Learning - Train Model'})[0] - # update_component_template(component.id, "temp/files/ffdl_train.yaml") - - -if __name__ == '__main__': - main() diff --git a/api/examples/credentials_api.py b/api/examples/credentials_api.py deleted file mode 100644 index 27cefaca..00000000 --- a/api/examples/credentials_api.py +++ /dev/null @@ -1,143 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import print_function - -import json -import random -import swagger_client - -from os import environ as env -from pprint import pprint -from pipelines_api import list_pipelines -from swagger_client.api_client import ApiClient, Configuration -from swagger_client.models import ApiCredential, ApiListCredentialsResponse -from swagger_client.rest import ApiException -from sys import stderr -from urllib3.response import HTTPResponse - - -host = '127.0.0.1' -port = '8080' -# host = env.get("MLX_API_SERVICE_HOST") -# port = env.get("MLX_API_SERVICE_PORT") - -api_base_path = 'apis/v1alpha1' - - -def get_swagger_client(): - - config = Configuration() - config.host = f'http://{host}:{port}/{api_base_path}' - api_client = ApiClient(configuration=config) - - return api_client - - -def print_function_name_decorator(func): - - def wrapper(*args, **kwargs): - print() - print(f"---[ {func.__name__}{args}{kwargs} ]---") - print() - return func(*args, **kwargs) - - return wrapper - - -@print_function_name_decorator -def create_credential(pipeline_id: str, project_id: str, data_assets: [str] = []) -> ApiCredential: - - api_client = get_swagger_client() - api_instance = swagger_client.CredentialServiceApi(api_client=api_client) - - try: - api_credential = ApiCredential(pipeline_id=pipeline_id, project_id=project_id, data_assets=data_assets) - - api_response: ApiCredential = api_instance.create_credential(api_credential) - - return api_response - - except ApiException as e: - print("Exception when calling CredentialServiceApi -> create_credential: %s\n" % e, file=stderr) - - return [] - - -@print_function_name_decorator -def get_credential(credential_id: str) -> ApiCredential: - - api_client = get_swagger_client() - api_instance = swagger_client.CredentialServiceApi(api_client=api_client) - - try: - api_credential: ApiCredential = api_instance.get_credential(credential_id) - pprint(api_credential, indent=2) - return api_credential - - except ApiException as e: - print("Exception when calling CredentialServiceApi -> get_credential: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def delete_credential(credential_id: str): - - api_client = get_swagger_client() - api_instance = swagger_client.CredentialServiceApi(api_client=api_client) - - try: - api_instance.delete_credential(credential_id) - except ApiException as e: - print("Exception when calling CredentialServiceApi -> delete_credential: %s\n" % e, file=stderr) - - -@print_function_name_decorator -def list_credentials(filter_dict: dict = {}, sort_by: str = None) -> [ApiCredential]: - - api_client = get_swagger_client() - api_instance = swagger_client.CredentialServiceApi(api_client=api_client) - - try: - filter_str = json.dumps(filter_dict) if filter_dict else None - - api_response: ApiListCredentialsResponse = api_instance.list_credentials(filter=filter_str, sort_by=sort_by) - - for c in api_response.credentials: - print("%s %s pl:%s pr:%s" % (c.id, c.created_at.strftime("%Y-%m-%d %H:%M:%S"), c.pipeline_id, c.project_id)) - - return api_response.credentials - - except ApiException as e: - print("Exception when calling CredentialServiceApi -> list_credentials: %s\n" % e, file=stderr) - - return [] - - -def main(): - # select a random pipeline - pipelines = list_pipelines() - i = random.randint(0, len(pipelines)-1) - - # create a new credential - credential = create_credential(pipeline_id=pipelines[i].id, project_id="xyz", data_assets=["data1", "data2"]) - pprint(credential) - - # list credentials - list_credentials() - - # list credentials for a pipeline - list_credentials(filter_dict={"pipeline_id": pipelines[i].id}) - - # retrieve credential - credential = get_credential(credential.id) - # pprint(credential) - - # delete credentials - delete_credential(credential.id) - - -if __name__ == '__main__': - # delete_credential("*") - main() diff --git a/api/examples/dataset_api.py b/api/examples/dataset_api.py deleted file mode 100644 index ce6a8ea4..00000000 --- a/api/examples/dataset_api.py +++ /dev/null @@ -1,368 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from __future__ import print_function - -import json -import os -import random -import re -import swagger_client -import tarfile -import tempfile - -from glob import glob -from io import BytesIO -from os import environ as env -from pprint import pprint -from swagger_client.api_client import ApiClient, Configuration -from swagger_client.models import ApiDataset, ApiGetTemplateResponse, ApiListDatasetsResponse, \ - ApiGenerateCodeResponse, ApiRunCodeResponse -from swagger_client.rest import ApiException -from sys import stderr -from urllib3.response import HTTPResponse - -host = '127.0.0.1' -port = '8080' -# host = env.get("MLX_API_SERVICE_HOST") -# port = env.get("MLX_API_SERVICE_PORT") - -api_base_path = 'apis/v1alpha1' - -yaml_files = sorted(filter(lambda f: "template" not in f, - glob("./../../../katalog/dataset-samples/**/*.yaml", recursive=True))) - - -def get_swagger_client(): - config = Configuration() - config.host = f'http://{host}:{port}/{api_base_path}' - api_client = ApiClient(configuration=config) - return api_client - - -def print_function_name_decorator(func): - def wrapper(*args, **kwargs): - print() - print(f"---[ {func.__name__}{args}{kwargs} ]---") - print() - return func(*args, **kwargs) - return wrapper - - -def create_tar_file(yamlfile_name): - # TODO: change how to get the basename after adding real dataset samples - yamlfile_basename = "{}.yaml".format(yamlfile_name.split(os.path.sep)[-3]) - tmp_dir = tempfile.gettempdir() - tarfile_path = os.path.join(tmp_dir, yamlfile_basename.replace(".yaml", ".tgz")) - - with tarfile.open(tarfile_path, "w:gz") as tar: - tar.add(yamlfile_name, arcname=yamlfile_basename) - - tar.close() - - return tarfile_path - - -def upload_dataset_template(uploadfile_name, name=None) -> str: - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - dataset: ApiDataset = api_instance.upload_dataset(uploadfile=uploadfile_name, name=name) - print(f"Uploaded '{dataset.name}': {dataset.id}") - return dataset.id - - except ApiException as e: - print("Exception when calling DatasetServiceApi -> upload_dataset: %s\n" % e, file=stderr) - # raise e - - return None - - -@print_function_name_decorator -def upload_dataset_templates() -> [str]: - template_ids = [] - - for yaml_file in yaml_files: - # tarfile_name = create_tar_file(yaml_file) - # template_id = upload_dataset_template(tarfile_name) - template_id = upload_dataset_template(yaml_file) - template_ids += [template_id] - - return template_ids - - -@print_function_name_decorator -def upload_dataset_file(dataset_id, file_path): - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - response = api_instance.upload_dataset_file(id=dataset_id, uploadfile=file_path) - print(f"Upload file '{file_path}' to dataset with ID '{dataset_id}'") - - except ApiException as e: - print("Exception when calling DatasetServiceApi -> upload_dataset_file: %s\n" % e, file=stderr) - raise e - - -@print_function_name_decorator -def download_dataset_tgz(dataset_id) -> str: - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - response: HTTPResponse = \ - api_instance.download_dataset_files(dataset_id, - include_generated_code=True, - _preload_content=False) - - attachment_header = response.info().get("Content-Disposition", - f"attachment; filename={dataset_id}.tgz") - - download_filename = re.sub("attachment; filename=", "", attachment_header) - - download_dir = os.path.join(tempfile.gettempdir(), "download", "datasets") - os.makedirs(download_dir, exist_ok=True) - tarfile_path = os.path.join(download_dir, download_filename) - - with open(tarfile_path, 'wb') as f: - f.write(response.read()) - - print(tarfile_path) - - return tarfile_path - - except ApiException as e: - print("Exception when calling DatasetServiceApi -> download_dataset_files: %s\n" % e, file=stderr) - - return "Download failed?" - - -@print_function_name_decorator -def verify_dataset_download(dataset_id: str) -> bool: - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - response: HTTPResponse = \ - api_instance.download_dataset_files(dataset_id, - include_generated_code=True, - _preload_content=False) - tgz_file = BytesIO(response.read()) - tar = tarfile.open(fileobj=tgz_file) - - file_contents = {m.name.split(".")[-1]: tar.extractfile(m).read().decode("utf-8") - for m in tar.getmembers()} - - template_response: ApiGetTemplateResponse = api_instance.get_dataset_template(dataset_id) - template_text_from_api = template_response.template - - assert template_text_from_api == file_contents.get("yaml", file_contents.get("yml")) - - # TODO: verify generated code - # generate_code_response: ApiGenerateCodeResponse = api_instance.generate_dataset_code(dataset_id) - # run_script_from_api = generate_code_response.script - # - # regex = re.compile(r"name='[^']*'") # controller adds random chars to name, replace those - # - # assert regex.sub("name='...'", run_script_from_api) == \ - # regex.sub("name='...'", file_contents.get("py")) - - print("downloaded files match") - - return True - - except ApiException as e: - print("Exception when calling DatasetServiceApi -> download_dataset_files: %s\n" % e, file=stderr) - - return False - - -@print_function_name_decorator -def approve_datasets_for_publishing(dataset_ids: [str]): - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - api_response = api_instance.approve_datasets_for_publishing(dataset_ids) - - except ApiException as e: - print("Exception when calling DatasetServiceApi -> approve_datasets_for_publishing: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def set_featured_datasets(dataset_ids: [str]): - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - api_response = api_instance.set_featured_datasets(dataset_ids) - - except ApiException as e: - print("Exception when calling DatasetServiceApi -> set_featured_datasets: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def get_dataset(dataset_id: str) -> ApiDataset: - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - dataset_meta: ApiDataset = api_instance.get_dataset(dataset_id) - pprint(dataset_meta, indent=2) - return dataset_meta - - except ApiException as e: - print("Exception when calling DatasetServiceApi -> get_dataset: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def delete_dataset(dataset_id: str): - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - api_instance.delete_dataset(dataset_id) - except ApiException as e: - print("Exception when calling DatasetServiceApi -> delete_dataset: %s\n" % e, file=stderr) - - -@print_function_name_decorator -def get_template(template_id: str) -> str: - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - template_response: ApiGetTemplateResponse = api_instance.get_dataset_template(template_id) - print(template_response.template) - - # yaml_dict = yaml.load(template_response.template, Loader=yaml.FullLoader) - # dataset_name = yaml_dict.get("name") or f"template_{template_id}" - # template_file = os.path.join("files", dataset_name) + ".yaml" - - # with open(template_file, "w") as f: - # f.write(template_response.template) - - return template_response.template - - except ApiException as e: - print("Exception when calling DatasetServiceApi -> get_dataset_template: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def generate_code(dataset_id: str) -> str: - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - generate_code_response: ApiGenerateCodeResponse = api_instance.generate_dataset_code(dataset_id) - print(generate_code_response.script) - - return generate_code_response.script - - except ApiException as e: - print("Exception while calling DatasetServiceApi -> generate_code: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def run_code(dataset_id: str, parameters: dict = {}, run_name: str = None) -> str: - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - param_array = [{"name": key, "value": value} for key, value in parameters.items()] - run_code_response: ApiRunCodeResponse = api_instance.run_dataset(dataset_id, - run_name=run_name, - parameters=param_array) - print(run_code_response.run_url) - - return run_code_response.run_url - - except ApiException as e: - print("Exception while calling DatasetServiceApi -> run_code: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def list_datasets(filter_dict: dict = {}, sort_by: str = None) -> [ApiDataset]: - api_client = get_swagger_client() - api_instance = swagger_client.DatasetServiceApi(api_client=api_client) - - try: - filter_str = json.dumps(filter_dict) if filter_dict else None - - api_response: ApiListDatasetsResponse = api_instance.list_datasets(filter=filter_str, sort_by=sort_by) - - for c in api_response.datasets: - print("%s %s %s" % (c.id, c.created_at.strftime("%Y-%m-%d %H:%M:%S"), c.name)) - - return api_response.datasets - - except ApiException as e: - print("Exception when calling DatasetServiceApi -> list_datasets: %s\n" % e, file=stderr) - - return [] - - -def main(): - # delete existing datasets - delete_dataset(dataset_id="*") - - # upload all templates - dataset_ids: [str] = upload_dataset_templates() - - # list all datasets - datasets = list_datasets() - dataset_ids: [str] = [dataset.id for dataset in datasets] - - # set featured datasets - set_featured_datasets(dataset_ids) - - # approve datasets to be published - approve_datasets_for_publishing(dataset_ids) - - # randomly selected a dataset - i = random.randint(0, len(dataset_ids) - 1) - dataset_id = dataset_ids[i] - - # show one randomly selected dataset - get_dataset(dataset_id) - get_template(dataset_id) - - # generate sample pipeline code for dataset - generate_code(dataset_id) - - # run sample pipeline - run_code(dataset_id, parameters={"namespace": "kubeflow"}) - - # TODO: verify uploaded file(s) match downloaded file(s) (that's different from comparing template with download) - tgz_file = download_dataset_tgz(dataset_id) - verify_dataset_download(dataset_id) - upload_dataset_file(dataset_id, tgz_file) - - # TODO: run DataSet in a Kubeflow Pipeline after generating a training DSL? - - # # delete one dataset - # delete_dataset(dataset_id) - - # # TODO: update a dataset - # dataset = list_datasets(filter_dict={"name": "Fashion MNIST"})[0] - # update_dataset_template(dataset.id, "temp/files/fashion-mnist.yaml") - - -if __name__ == '__main__': - pprint(yaml_files) - main() diff --git a/api/examples/models_api.py b/api/examples/models_api.py deleted file mode 100644 index a55ba53f..00000000 --- a/api/examples/models_api.py +++ /dev/null @@ -1,379 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from __future__ import print_function - -import json -import os -import random -import re -import swagger_client -import tarfile -import tempfile - -from glob import glob -from io import BytesIO -from os import environ as env -from pprint import pprint -from swagger_client.api_client import ApiClient, Configuration -from swagger_client.models import ApiModel, ApiGetTemplateResponse, ApiListModelsResponse, \ - ApiGenerateModelCodeResponse, ApiRunCodeResponse -from swagger_client.rest import ApiException -from sys import stderr -from urllib3.response import HTTPResponse - - -host = '127.0.0.1' -port = '8080' -# host = env.get("MLX_API_SERVICE_HOST") -# port = env.get("MLX_API_SERVICE_PORT") - -api_base_path = 'apis/v1alpha1' - -yaml_files = sorted(filter(lambda f: "template" not in f, - glob("./../../../katalog/model-samples/**/*.yaml", recursive=True))) - - -def get_swagger_client(): - config = Configuration() - config.host = f'http://{host}:{port}/{api_base_path}' - api_client = ApiClient(configuration=config) - return api_client - - -def print_function_name_decorator(func): - def wrapper(*args, **kwargs): - print() - print(f"---[ {func.__name__}{args}{kwargs} ]---") - print() - return func(*args, **kwargs) - return wrapper - - -def create_tar_file(yamlfile_name): - yamlfile_basename = os.path.basename(yamlfile_name) - tmp_dir = tempfile.gettempdir() - tarfile_path = os.path.join(tmp_dir, yamlfile_basename.replace(".yaml", ".tgz")) - with tarfile.open(tarfile_path, "w:gz") as tar: - tar.add(yamlfile_name, arcname=yamlfile_basename) - tar.close() - return tarfile_path - - -def upload_model_template(uploadfile_name, name=None) -> str: - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - try: - print(f"Uploading '{uploadfile_name}' ... ", end='') - model: ApiModel = api_instance.upload_model(uploadfile=uploadfile_name, name=name) - print(f"{model.id} '{model.name}'") - return model.id - except ApiException as e: - print("Exception when calling ModelServiceApi -> upload_model: %s\n" % e, file=stderr) - raise e - return None - - -@print_function_name_decorator -def upload_model_file(model_id, file_path): - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - try: - response = api_instance.upload_model_file(id=model_id, uploadfile=file_path) - print(f"Upload file '{file_path}' to model '{model_id}'") - except ApiException as e: - print("Exception when calling ModelServiceApi -> upload_model_file: %s\n" % e, file=stderr) - raise e - - -@print_function_name_decorator -def upload_model_templates(yaml_files=yaml_files) -> [str]: - template_ids = [] - for yaml_file in yaml_files: - # tarfile_name = create_tar_file(yaml_file) - # template_id = upload_model_template(tarfile_name) - template_id = upload_model_template(yaml_file) - template_ids += [template_id] - return template_ids - - -@print_function_name_decorator -def download_model_tgz(model_id, download_dir: str = None) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - - try: - response: HTTPResponse = \ - api_instance.download_model_files(model_id, - include_generated_code=True, - _preload_content=False) - - attachment_header = response.info().get("Content-Disposition", - f"attachment; filename={model_id}.tgz") - - download_filename = re.sub("attachment; filename=", "", attachment_header) - - download_dir = download_dir or os.path.join(tempfile.gettempdir(), "download", "models") - os.makedirs(download_dir, exist_ok=True) - tarfile_path = os.path.join(download_dir, download_filename) - - with open(tarfile_path, 'wb') as f: - f.write(response.read()) - - print(tarfile_path) - - return tarfile_path - - except ApiException as e: - print("Exception when calling ModelServiceApi -> download_model_files: %s\n" % e, file=stderr) - - return "Download failed?" - - -@print_function_name_decorator -def verify_model_download(model_id: str) -> bool: - - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - - try: - response: HTTPResponse = \ - api_instance.download_model_files(model_id, - include_generated_code=True, - _preload_content=False) - tgz_file = BytesIO(response.read()) - tar = tarfile.open(fileobj=tgz_file) - - file_contents = {m.name: tar.extractfile(m).read().decode("utf-8") - for m in tar.getmembers()} - - # verify template text matches - - template_response: ApiGetTemplateResponse = api_instance.get_model_template(model_id) - template_from_api = template_response.template - template_from_tgz = [content for filename, content in file_contents.items() - if filename.endswith(".yaml") or filename.endswith(".yml")][0] - - assert template_from_api == template_from_tgz - - # verify generated code matches - - generate_code_response: ApiGenerateModelCodeResponse = \ - api_instance.generate_model_code(model_id) - - for model_script in generate_code_response.scripts: - stage = model_script.pipeline_stage - platform = model_script.execution_platform - script_from_api = model_script.script_code - - downloaded_script = [content for filename, content in file_contents.items() - if f"run_{stage}_{platform}" in filename][0] - - assert script_from_api == downloaded_script - - print("downloaded files match") - - return True - - except ApiException as e: - print("Exception when calling ModelServiceApi -> download_model_files: %s\n" % e, file=stderr) - - return False - - -@print_function_name_decorator -def approve_models_for_publishing(model_ids: [str]): - - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - - try: - api_response = api_instance.approve_models_for_publishing(model_ids) - - except ApiException as e: - print("Exception when calling ModelServiceApi -> approve_models_for_publishing: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def set_featured_models(model_ids: [str]): - - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - - try: - api_response = api_instance.set_featured_models(model_ids) - - except ApiException as e: - print("Exception when calling ModelServiceApi -> set_featured_models: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def get_model(model_id: str) -> ApiModel: - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - try: - model_meta: ApiModel = api_instance.get_model(model_id) - pprint(model_meta, indent=2) - return model_meta - except ApiException as e: - print("Exception when calling ModelServiceApi -> get_model: %s\n" % e, file=stderr) - return None - - -@print_function_name_decorator -def delete_model(model_id: str): - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - try: - api_instance.delete_model(model_id) - except ApiException as e: - print("Exception when calling ModelServiceApi -> delete_model: %s\n" % e, file=stderr) - - -@print_function_name_decorator -def get_template(template_id: str) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - - try: - template_response: ApiGetTemplateResponse = api_instance.get_model_template(template_id) - print(template_response.template) - - # yaml_dict = yaml.load(template_response.template, Loader=yaml.FullLoader) - # model_name = yaml_dict.get("name") or f"template_{template_id}" - # template_file = os.path.join("files", model_name) + ".yaml" - - # with open(template_file, "w") as f: - # f.write(template_response.template) - - return template_response.template - - except ApiException as e: - print("Exception when calling ModelServiceApi -> get_model_template: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def generate_code(model_id: str) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - - try: - generate_code_response: ApiGenerateModelCodeResponse = api_instance.generate_model_code(model_id) - - for model_script in generate_code_response.scripts: - print(f"#######################################################") - print(f"# pipeline_stage: {model_script.pipeline_stage}") - print(f"# execution_platform: {model_script.execution_platform}") - print(f"#######################################################") - print() - print(model_script.script_code) - print() - - return generate_code_response.scripts - - except ApiException as e: - print("Exception while calling ModelServiceApi -> generate_code: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def run_code(model_id: str, pipeline_stage: str, execution_platform: str, run_name: str = None, parameters=dict()) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - - try: - run_code_response: ApiRunCodeResponse = api_instance.run_model(model_id, pipeline_stage, execution_platform, - run_name=run_name, parameters=parameters) - print(run_code_response.run_url) - - return run_code_response.run_url - - except ApiException as e: - print("Exception while calling ModelServiceApi -> run_code: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def list_models(filter_dict: dict = {}, sort_by: str = None) -> [ApiModel]: - - api_client = get_swagger_client() - api_instance = swagger_client.ModelServiceApi(api_client=api_client) - - try: - filter_str = json.dumps(filter_dict) if filter_dict else None - - api_response: ApiListModelsResponse = api_instance.list_models(filter=filter_str, sort_by=sort_by) - - for c in api_response.models: - print("%s %s %s" % (c.id, c.created_at.strftime("%Y-%m-%d %H:%M:%S"), c.name)) - - return api_response.models - - except ApiException as e: - print("Exception when calling ModelServiceApi -> list_models: %s\n" % e, file=stderr) - - return [] - - -def main(): - # delete existing models - delete_model(model_id="*") - - # upload all templates - model_ids: [str] = upload_model_templates() - - # list all models - models = list_models() - model_ids: [str] = [model.id for model in models] - - # set featured models - set_featured_models(model_ids) - - # approve models to be published - approve_models_for_publishing(model_ids) - - # randomly selected a model - i = random.randint(0, len(model_ids)-1) - model_id = model_ids[i] - - # show one randomly selected model, gen code, download, update - get_model(model_id) - generate_code(model_id) - get_template(model_id) - tarfile_path = download_model_tgz(model_id) - verify_model_download(model_id) - upload_model_file(model_id, tarfile_path) - - # run code - model = get_model("max-image-caption-generator") - get_template(model.id) - generate_code(model.id) - run_code(model.id, "serve", "kubernetes", "Maximum image captioning fun") - - # model_id = upload_model_templates(["./temp/models/max-image-completer.yaml"])[0] - # verify_model_download(model_id) - # run_code(model_id, "train", "WatsonML") - # delete_model(model_id) - - # # update existing model - # model = get_model("max-audio-classifier") - # upload_model_file(model.id, "temp/files/max-audio-classifier.tgz") - # upload_model_file(model.id, "temp/files/max-audio-classifier.yaml") - - -if __name__ == '__main__': - pprint(yaml_files) - main() diff --git a/api/examples/notebooks_api.py b/api/examples/notebooks_api.py deleted file mode 100644 index 83e99ccd..00000000 --- a/api/examples/notebooks_api.py +++ /dev/null @@ -1,427 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from __future__ import print_function - -import json -import os -import random -import re -import requests -import swagger_client -import tarfile -import tempfile -import yaml - -from glob import glob -from io import BytesIO -from os import environ as env -from pprint import pprint -from swagger_client.api_client import ApiClient, Configuration -from swagger_client.models import ApiNotebook, ApiGetTemplateResponse, ApiListNotebooksResponse, \ - ApiGenerateCodeResponse, ApiRunCodeResponse -from swagger_client.rest import ApiException -from sys import stderr -from urllib3.response import HTTPResponse - - -host = '127.0.0.1' -port = '8080' -# host = env.get("MLX_API_SERVICE_HOST") -# port = env.get("MLX_API_SERVICE_PORT") - -api_base_path = 'apis/v1alpha1' - -yaml_files = sorted(filter(lambda f: "template" not in f, glob("./../../../katalog/notebook-samples/*.yaml", recursive=True))) - -IBM_GHE_API_TOKEN = env.get("IBM_GHE_API_TOKEN") - - -def get_swagger_client(): - - config = Configuration() - config.host = f'http://{host}:{port}/{api_base_path}' - api_client = ApiClient(configuration=config) - - return api_client - - -def print_function_name_decorator(func): - - def wrapper(*args, **kwargs): - print() - print(f"---[ {func.__name__}{args}{kwargs} ]---") - print() - return func(*args, **kwargs) - - return wrapper - - -def create_tar_file(yamlfile_name): - - yamlfile_basename = os.path.basename(yamlfile_name) - tmp_dir = tempfile.gettempdir() - tarfile_path = os.path.join(tmp_dir, yamlfile_basename.replace(".yaml", ".tgz")) - - with tarfile.open(tarfile_path, "w:gz") as tar: - tar.add(yamlfile_name, arcname=yamlfile_basename) - - tar.close() - - return tarfile_path - - -def upload_notebook_template(uploadfile_name, name=None, ghe_token=None) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - if ghe_token: - notebook: ApiNotebook = api_instance.upload_notebook(uploadfile=uploadfile_name, name=name, - enterprise_github_token=ghe_token) - else: - notebook: ApiNotebook = api_instance.upload_notebook(uploadfile=uploadfile_name, name=name) - - print(f"Uploaded '{notebook.name}': {notebook.id}") - return notebook.id - - except ApiException as e: - print("Exception when calling NotebookServiceApi -> upload_notebook: %s\n" % e, file=stderr) - # raise e - - return None - - -@print_function_name_decorator -def upload_notebook_templates(yaml_files: [str] = yaml_files) -> [str]: - - template_ids = [] - - for yaml_file in yaml_files: - with open(yaml_file, "rb") as f: - yaml_dict = yaml.load(f, Loader=yaml.SafeLoader) - - if "github.ibm.com" in yaml_dict["implementation"]["github"]["source"]: - api_token = IBM_GHE_API_TOKEN - else: - api_token = None - - # tarfile_name = create_tar_file(yaml_file) - # template_id = upload_notebook_template(tarfile_name, ghe_token=api_token) - template_id = upload_notebook_template(yaml_file, ghe_token=api_token) - - template_ids += [template_id] - - return template_ids - - -@print_function_name_decorator -def upload_notebook_file(notebook_id, file_path): - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - response = api_instance.upload_notebook_file(id=notebook_id, uploadfile=file_path) - print(f"Upload file '{file_path}' to notebook with ID '{notebook_id}'") - - except ApiException as e: - print("Exception when calling NotebookServiceApi -> upload_notebook_file: %s\n" % e, file=stderr) - raise e - - -@print_function_name_decorator -def download_notebook_tgz(notebook_id, - download_dir=os.path.join(tempfile.gettempdir(), "download", "notebooks")) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - response: HTTPResponse = \ - api_instance.download_notebook_files(notebook_id, - include_generated_code=True, - _preload_content=False) - - attachment_header = response.info().get("Content-Disposition", - f"attachment; filename={notebook_id}.tgz") - - download_filename = re.sub("attachment; filename=", "", attachment_header) - os.makedirs(download_dir, exist_ok=True) - tarfile_path = os.path.join(download_dir, download_filename) - - with open(tarfile_path, 'wb') as f: - f.write(response.read()) - - print(tarfile_path) - - return tarfile_path - - except ApiException as e: - print("Exception when calling NotebookServiceApi -> download_notebook_files: %s\n" % e, file=stderr) - - return "Download failed?" - - -@print_function_name_decorator -def verify_notebook_download(notebook_id: str) -> bool: - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - response: HTTPResponse = \ - api_instance.download_notebook_files(notebook_id, - include_generated_code=True, - _preload_content=False) - tgz_file = BytesIO(response.read()) - tar = tarfile.open(fileobj=tgz_file) - - file_contents = {m.name.split(".")[-1]: tar.extractfile(m).read().decode("utf-8") - for m in tar.getmembers()} - - template_response: ApiGetTemplateResponse = api_instance.get_notebook_template(notebook_id) - template_text_from_api = template_response.template - - assert template_text_from_api == file_contents.get("yaml", file_contents.get("yml")) - - generate_code_response: ApiGenerateCodeResponse = api_instance.generate_notebook_code(notebook_id) - run_script_from_api = generate_code_response.script - - regex = re.compile(r"name='[^']*'") # controller adds random chars to name, replace those - - assert regex.sub("name='...'", run_script_from_api) == \ - regex.sub("name='...'", file_contents.get("py")) - - print("downloaded files match") - - return True - - except ApiException as e: - print("Exception when calling NotebookServiceApi -> download_notebook_files: %s\n" % e, file=stderr) - - return False - - -@print_function_name_decorator -def approve_notebooks_for_publishing(notebook_ids: [str]): - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - api_response = api_instance.approve_notebooks_for_publishing(notebook_ids) - - except ApiException as e: - print("Exception when calling NotebookServiceApi -> approve_notebooks_for_publishing: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def set_featured_notebooks(notebook_ids: [str]): - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - api_response = api_instance.set_featured_notebooks(notebook_ids) - - except ApiException as e: - print("Exception when calling NotebookServiceApi -> set_featured_notebooks: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def get_notebook(notebook_id: str) -> ApiNotebook: - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - notebook_meta: ApiNotebook = api_instance.get_notebook(notebook_id) - pprint(notebook_meta, indent=2) - return notebook_meta - - except ApiException as e: - print("Exception when calling NotebookServiceApi -> get_notebook: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def delete_notebook(notebook_id: str): - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - api_instance.delete_notebook(notebook_id) - except ApiException as e: - print("Exception when calling NotebookServiceApi -> delete_notebook: %s\n" % e, file=stderr) - - -@print_function_name_decorator -def get_template(template_id: str) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - template_response: ApiGetTemplateResponse = api_instance.get_notebook_template(template_id) - print(template_response.template) - - # yaml_dict = yaml.load(template_response.template, Loader=yaml.FullLoader) - # notebook_name = yaml_dict.get("name") or f"template_{template_id}" - # template_file = os.path.join("files", notebook_name) + ".yaml" - - # with open(template_file, "w") as f: - # f.write(template_response.template) - - return template_response.template - - except ApiException as e: - print("Exception when calling NotebookServiceApi -> get_notebook_template: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def generate_code(notebook_id: str) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - generate_code_response: ApiGenerateCodeResponse = api_instance.generate_notebook_code(notebook_id) - print(generate_code_response.script) - - return generate_code_response.script - - except ApiException as e: - print("Exception while calling NotebookServiceApi -> generate_code: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def run_notebook(notebook_id: str, parameters=dict(), run_name: str = None) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - run_code_response: ApiRunCodeResponse = api_instance.run_notebook(notebook_id, - parameters=parameters, - run_name=run_name) - print(run_code_response.run_url) - print(run_code_response.run_output_location) - - return run_code_response.run_url - - except ApiException as e: - print("Exception while calling NotebookServiceApi -> run_code: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def list_notebooks(filter_dict: dict = {}, sort_by: str = None) -> [ApiNotebook]: - - api_client = get_swagger_client() - api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - - try: - filter_str = json.dumps(filter_dict) if filter_dict else None - - api_response: ApiListNotebooksResponse = api_instance.list_notebooks(filter=filter_str, sort_by=sort_by) - - for c in api_response.notebooks: - print("%s %s %s" % (c.id, c.created_at.strftime("%Y-%m-%d %H:%M:%S"), c.name)) - - return api_response.notebooks - - except ApiException as e: - print("Exception when calling NotebookServiceApi -> list_notebooks: %s\n" % e, file=stderr) - - return [] - - -@print_function_name_decorator -def download_notebooks_from_github(): - - download_dir = "./temp/download/notebooks" - os.makedirs(download_dir, exist_ok=True) - - for yaml_file in yaml_files: - - with open(yaml_file, "rb") as f: - yaml_dict = yaml.load(f, Loader=yaml.SafeLoader) - - url = yaml_dict["implementation"]["github"]["source"] - - download_url = url.replace("/blob", "")\ - .replace("github.com", "raw.githubusercontent.com")\ - .replace("github.ibm.com", "raw.github.ibm.com") - - if "github.ibm.com" in url: - headers = {'Authorization': 'token %s' % env.get("IBM_GHE_API_TOKEN")} - else: - headers = {} - - response = requests.get(download_url, headers=headers, allow_redirects=True) - - if response.status_code == 200: - with open(os.path.join(download_dir, os.path.basename(url)), 'wb') as f: - f.write(response.content) - else: - print("{}: {:20s} --> {}".format( - response.status_code, os.path.basename(yaml_file), url)) - - -def main(): - # delete existing notebooks - delete_notebook(notebook_id="*") - - # upload all templates - notebook_ids: [str] = upload_notebook_templates() - - # list all notebooks - notebooks = list_notebooks() - notebook_ids: [str] = [notebook.id for notebook in notebooks] - - # set featured notebooks - set_featured_notebooks(notebook_ids) - - # approve notebooks to be published - approve_notebooks_for_publishing(notebook_ids) - - # randomly selected a notebook - i = random.randint(0, len(notebook_ids)-1) - notebook_id = notebook_ids[i] - - # show one randomly selected notebook - get_notebook(notebook_id) - get_template(notebook_id) - download_notebook_tgz(notebook_id) - verify_notebook_download(notebook_id) - generate_code(notebook_id) - run_notebook(notebook_id, run_name=f"test_run_{notebook_id}") - - # notebook = list_notebooks(filter_dict={"name": "AIF360 Bias detection example"})[0] - # generate_code(notebook.id) - # run_notebook(notebook.id, run_name="AIF360 bias detection") - - # # delete one notebook - # delete_notebook(notebook_id) - - -if __name__ == '__main__': - pprint(yaml_files) - main() - # download_notebooks_from_github() - # for notebook in list_notebooks(): - # run_notebook(notebook.id, run_name="My test run for {}".format(notebook.name)) diff --git a/api/examples/pipelines_api.py b/api/examples/pipelines_api.py deleted file mode 100644 index 7ad00ebd..00000000 --- a/api/examples/pipelines_api.py +++ /dev/null @@ -1,486 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from __future__ import print_function - -import glob -import json -import os -import random -import re -import swagger_client -import tarfile -import tempfile -import typing -import yaml - -from io import BytesIO -from os import environ as env -from pprint import pprint -from swagger_client.api_client import ApiClient, Configuration -from swagger_client.models import ApiPipeline, ApiGetTemplateResponse, ApiListPipelinesResponse, \ - ApiGenerateCodeResponse, ApiRunCodeResponse, ApiPipelineExtended, ApiPipelineCustom, ApiPipelineCustomRunPayload, \ - ApiPipelineTask, ApiComponent, ApiNotebook, ApiPipelineTaskArguments, ApiPipelineDAG, ApiPipelineInputs, \ - ApiParameter -from swagger_client.rest import ApiException -from sys import stderr -from types import SimpleNamespace as custom_obj -from urllib3.response import HTTPResponse - - -host = '127.0.0.1' -port = '8080' -# host = env.get("MLX_API_SERVICE_HOST") -# port = env.get("MLX_API_SERVICE_PORT") - -api_base_path = 'apis/v1alpha1' - -# yaml_files = glob.glob("./../../pipelines/pipeline-samples/*/*.yaml") -# yaml_files = glob.glob("./../../../kfp-tekton/samples/*/*.yaml") -yaml_files = glob.glob("./../../../kfp-tekton/sdk/python/tests/compiler/testdata/*.yaml")[:10] -# yaml_files = sorted(glob.glob("./../../../katalog/pipeline-samples/*.yaml", recursive=True)) - - -def get_swagger_client(): - - config = Configuration() - config.host = f'http://{host}:{port}/{api_base_path}' - api_client = ApiClient(configuration=config) - - return api_client - - -def print_function_name_decorator(func): - - def wrapper(*args, **kwargs): - print() - print(f"---[ {func.__name__}{str(args)[:50]}{str(kwargs)[0:50]} ]---") - print() - return func(*args, **kwargs) - - return wrapper - - -def create_tar_file(yamlfile_name): - - yamlfile_basename = os.path.basename(yamlfile_name) - tmp_dir = tempfile.gettempdir() - tarfile_path = os.path.join(tmp_dir, yamlfile_basename.replace(".yaml", ".tgz")) - - with tarfile.open(tarfile_path, "w:gz") as tar: - tar.add(yamlfile_name, arcname=yamlfile_basename) - - tar.close() - - return tarfile_path - - -def upload_pipeline_template(uploadfile_name, name: str = None, description: str = None, annotations: str = "") -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - pipeline: ApiPipeline = api_instance.upload_pipeline(uploadfile=uploadfile_name, - name=name, - description=description, - annotations=annotations) - print(f"Uploaded '{pipeline.name}': {pipeline.id}") - return pipeline.id - - except ApiException as e: - print("Exception when calling PipelineServiceApi -> upload_pipeline: %s\n" % e, file=stderr) - raise e - - return None - - -@print_function_name_decorator -def upload_pipeline_templates() -> [str]: - - template_ids = [] - - for yaml_file in yaml_files: - pipeline_name = "test_" + os.path.basename(yaml_file).replace(".yaml", "") - # tarfile_name = create_tar_file(yaml_file) - # template_id = upload_pipeline_template(tarfile_name, name=pipeline_name) - template_id = upload_pipeline_template(yaml_file, name=pipeline_name) - template_ids += [template_id] - - return template_ids - - -@print_function_name_decorator -def upload_pipeline_file(pipeline_id, file_path): - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - response = api_instance.upload_pipeline_file(id=pipeline_id, uploadfile=file_path) - print(f"Upload file '{file_path}' to pipeline with ID '{pipeline_id}'") - - except ApiException as e: - print("Exception when calling PipelineServiceApi -> upload_pipeline_file: %s\n" % e, file=stderr) - raise e - - -@print_function_name_decorator -def download_pipeline_tgz(pipeline_id) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - response: HTTPResponse = \ - api_instance.download_pipeline_files(pipeline_id, _preload_content=False) - - attachment_header = response.info().get("Content-Disposition", - f"attachment; filename={pipeline_id}.tgz") - - download_filename = re.sub("attachment; filename=", "", attachment_header) - - download_dir = os.path.join(tempfile.gettempdir(), "download", "pipelines") - os.makedirs(download_dir, exist_ok=True) - tarfile_path = os.path.join(download_dir, download_filename) - - with open(tarfile_path, 'wb') as f: - f.write(response.read()) - - print(tarfile_path) - - return tarfile_path - - except ApiException as e: - print("Exception when calling PipelineServiceApi -> download_pipeline_files: %s\n" % e, file=stderr) - - return "Download failed?" - - -@print_function_name_decorator -def verify_pipeline_download(pipeline_id: str) -> bool: - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - response: HTTPResponse = api_instance.download_pipeline_files(pipeline_id, _preload_content=False) - - tgz_file = BytesIO(response.read()) - with tarfile.open(fileobj=tgz_file) as tar: - file_contents = {m.name: tar.extractfile(m).read().decode("utf-8") - for m in tar.getmembers()} - - template_response: ApiGetTemplateResponse = api_instance.get_template(pipeline_id) - template_text_from_api = template_response.template - - assert template_text_from_api == file_contents.get("pipeline.yaml") - - print("downloaded files match") - - return True - - except ApiException as e: - print("Exception when calling PipelineServiceApi -> download_pipeline_files: %s\n" % e, file=stderr) - - return False - - -@print_function_name_decorator -def approve_pipelines_for_publishing(pipeline_ids: [str]): - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - api_response = api_instance.approve_pipelines_for_publishing(pipeline_ids) - - except ApiException as e: - print("Exception when calling PipelineServiceApi -> approve_pipelines_for_publishing: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def set_featured_pipelines(pipeline_ids: [str]): - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - api_response = api_instance.set_featured_pipelines(pipeline_ids) - - except ApiException as e: - print("Exception when calling PipelineServiceApi -> set_featured_pipelines: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def get_pipeline(pipeline_id: str) -> ApiPipelineExtended: - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - pipeline_meta: ApiPipelineExtended = api_instance.get_pipeline(pipeline_id) - pprint(pipeline_meta, indent=2) - return pipeline_meta - - except ApiException as e: - print("Exception when calling PipelineServiceApi -> get_pipeline: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def delete_pipeline(pipeline_id: str): - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - api_instance.delete_pipeline(pipeline_id) - - except ApiException as e: - print("Exception when calling PipelineServiceApi -> delete_pipeline: %s\n" % e, file=stderr) - - -@print_function_name_decorator -def get_template(template_id: str) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - template_response: ApiGetTemplateResponse = api_instance.get_template(template_id) - print(template_response.template) - - # yaml_dict = yaml.load(template_response.template, Loader=yaml.FullLoader) - # pipeline_name = yaml_dict.get("name") or f"template_{template_id}" - # template_file = os.path.join("files", pipeline_name) + ".yaml" - - # with open(template_file, "w") as f: - # f.write(template_response.template) - - return template_response.template - - except ApiException as e: - print("Exception when calling PipelineServiceApi -> get_pipeline_template: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def run_pipeline(pipeline_id: str, parameters: dict = None, run_name: str = None) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - run_code_response: ApiRunCodeResponse = api_instance.run_pipeline(pipeline_id, parameters=parameters, - run_name=run_name) - print(run_code_response.run_url) - return run_code_response.run_url - - except ApiException as e: - print("Exception while calling PipelineServiceApi -> run_pipeline: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def generate_custom_pipeline(sequential_only=False) -> ApiPipelineCustom: - - api_client = get_swagger_client() - notebooks_api_instance = swagger_client.NotebookServiceApi(api_client=api_client) - components_api_instance = swagger_client.ComponentServiceApi(api_client=api_client) - - try: - components: typing.List[ApiComponent] = random.sample( - list(filter(lambda n: "StudyJob" not in n.name, - components_api_instance.list_components().components)), 3) - - # components = [] - - notebooks: typing.List[ApiNotebook] = random.sample( - notebooks_api_instance.list_notebooks().notebooks, 5) - - tasks: typing.List[ApiPipelineTask] = [] - - for c in components: - tasks.append( - ApiPipelineTask(name=f"component task {c.name}", - artifact_type="component", - artifact_id=c.id, - arguments=ApiPipelineTaskArguments(parameters=c.parameters), - dependencies=[])) - - for n in notebooks: - tasks.append( - ApiPipelineTask(name=f"notebook task {n.name}", - artifact_type="notebook", - artifact_id=n.id, - arguments=ApiPipelineTaskArguments(parameters=n.parameters), - dependencies=[])) - - if sequential_only: - for i in range(len(tasks)-1): - tasks[i+1].dependencies = [tasks[i].name] - else: - for i in range(len(tasks)): - num_deps = random.randint(0, i) - deps_idx = {random.randint(0, i) for n in range(0, num_deps)} - tasks[i].dependencies = [tasks[i].name for i in sorted(deps_idx)] - - pipeline_params = [] - - for t in tasks: - task_name_prefix = re.sub(r"\W+", "_", t.name, flags=re.ASCII).lower() - - for p in t.arguments.parameters: - if not (p.value or p.default): - param_name = re.sub(r"\W+", "_", p.name, flags=re.ASCII).lower() - pipeline_param_name = f"{task_name_prefix}_{param_name}" - p.value = "{{inputs.parameters." + pipeline_param_name + "}}" - pipeline_params.append(ApiParameter(name=pipeline_param_name, value="some value")) - - api_pipeline_custom = ApiPipelineCustom( - name="My custom pipeline", - description="A randomly generated pipeline from notebooks and components", - dag=ApiPipelineDAG(tasks=tasks), - inputs=ApiPipelineInputs(parameters=pipeline_params)) - - return api_pipeline_custom - - except ApiException as e: - print(f"Exception while generating custom pipeline DAG with parameters: \n{str(e)}", file=stderr) - - -@print_function_name_decorator -def run_custom_pipeline(pipeline_template: dict, parameters: list = None, run_name: str = None) -> str: - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - # TODO: cleanup pipeline parameter, we should not support KFP Argo YAML - if pipeline_template.get("spec", {}).get("templates"): - # pipeline_dag = [t for t in pipeline_template["spec"]["templates"] if "dag" in t][0] - pipeline_dag = list(filter(lambda t: "dag" in t, pipeline_template["spec"]["templates"]))[0] - elif "dag" in pipeline_template: - pipeline_dag = pipeline_template - - # custom_pipeline = ApiPipelineCustom.from_dict(pipeline_dag) - mock_response = custom_obj(data=json.dumps(pipeline_dag)) - custom_pipeline = api_client.deserialize(response=mock_response, response_type=ApiPipelineCustom) - run_custom_pipeline_payload = ApiPipelineCustomRunPayload(custom_pipeline=custom_pipeline, - run_parameters=parameters) - run_code_response: ApiRunCodeResponse = \ - api_instance.run_custom_pipeline(run_custom_pipeline_payload=run_custom_pipeline_payload, - run_name=run_name) - print(run_code_response.run_url) - return run_code_response.run_url - - except ApiException as e: - print("Exception while calling PipelineServiceApi -> run_pipeline: %s\n" % e, file=stderr) - - return None - - -@print_function_name_decorator -def list_pipelines(filter_dict: dict = {}, sort_by: str = None) -> [ApiPipeline]: - - api_client = get_swagger_client() - api_instance = swagger_client.PipelineServiceApi(api_client=api_client) - - try: - filter_str = json.dumps(filter_dict) if filter_dict else None - - api_response: ApiListPipelinesResponse = api_instance.list_pipelines(filter=filter_str, sort_by=sort_by) - - for c in api_response.pipelines: - print("%s %s %s" % (c.id, c.created_at.strftime("%Y-%m-%d %H:%M:%S"), c.name)) - - return api_response.pipelines - - except ApiException as e: - print("Exception when calling PipelineServiceApi -> list_pipelines: %s\n" % e, file=stderr) - - return [] - - -def main(): - - # delete existing pipelines, actually, only pipeline_extensions table and pipelines_extended view table - # delete_pipeline(pipeline_id="*") - - # delete "test_" pipelines - test_pipelines = list_pipelines(filter_dict={"name": "test_%"}) - for pipeline in test_pipelines: - delete_pipeline(pipeline.id) - - # upload all templates - pipeline_ids: [str] = upload_pipeline_templates() - - # list all pipelines - pipelines = list_pipelines() - pipeline_ids: [str] = [pipeline.id for pipeline in pipelines] - - # download a pipeline - tarfile_name = download_pipeline_tgz(pipeline_ids[0]) - - # upload a new pipeline with description and annotations - name = "New pipeline" - description = "Some description" - annotations_dict = {"platform": "Kubeflow", "license": "opensource"} - annotations_str = json.dumps(annotations_dict) - pipeline_id = upload_pipeline_template(tarfile_name, name, description, annotations_str) - p = get_pipeline(pipeline_id) - assert p.description == description and p.annotations == annotations_dict - - # delete the pipeline we just uploaded - delete_pipeline(pipeline_id) - - # approve pipelines to be published - approve_pipelines_for_publishing(pipeline_ids[:7]) - - # set featured pipelines - set_featured_pipelines(pipeline_ids[:4]) - - # randomly selected a pipeline - i = random.randint(0, len(pipeline_ids)-1) - pipeline_id = pipeline_ids[i] - - # show one randomly selected pipeline - get_pipeline(pipeline_id) - get_template(pipeline_id) - - verify_pipeline_download(pipeline_id) - - pipelines = list_pipelines(filter_dict={"name": "[Sample] Basic - Parallel execution"}) or \ - list_pipelines(filter_dict={"name": "[Sample] Basic - Parallel Join"}) or \ - list_pipelines(filter_dict={"name": "[Tutorial] DSL - Control structures"}) or \ - list_pipelines(filter_dict={"name": "test_parallel_join"}) - pipeline = pipelines[0] - arguments = { - "url1": "gs://ml-pipeline-playground/shakespeare1.txt", - "url2": "gs://ml-pipeline-playground/shakespeare2.txt" - } - run_pipeline(pipeline.id, arguments) - - # TODO: reactivate generating custom pipeline - # cust_pipeline = generate_custom_pipeline(sequential_only=True) - # # print(json.dumps(cust_pipeline.to_dict(), indent=2, sort_keys=False, ensure_ascii=True)) - # run_custom_pipeline(cust_pipeline.to_dict(), {"run_arg1": "run_arg1_value"}) - - # delete "test_" pipelines - test_pipelines = list_pipelines(filter_dict={"name": "test_%"}) - for pipeline in test_pipelines: - delete_pipeline(pipeline.id) - - -if __name__ == '__main__': - pprint(yaml_files) - main() diff --git a/api/examples/runs_api.py b/api/examples/runs_api.py deleted file mode 100644 index 0b5ac815..00000000 --- a/api/examples/runs_api.py +++ /dev/null @@ -1,160 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import print_function - -import json -import kfp - -from kfp_server_api import ApiListExperimentsResponse -from kfp_server_api import ApiListRunsResponse, ApiResourceType, ApiRunDetail -from kfp_server_api.rest import ApiException -from os import environ as env -from pprint import pprint - - -# export AMBASSADOR_SERVICE_HOST=$(kubectl get nodes -o jsonpath='{.items[0]..addresses[?(@.type=="ExternalIP")].address}') -# export AMBASSADOR_SERVICE_PORT=$(kubectl -n kubeflow get service ambassador -o jsonpath='{.spec.ports[0].nodePort}') -kfp_host = env.get("AMBASSADOR_SERVICE_HOST") -kfp_port = env.get("AMBASSADOR_SERVICE_PORT") - -url = f"{kfp_host}:{kfp_port}/pipeline" - - -def get_kfp_client() -> kfp.Client: - kfp_client = kfp.Client(url) - return kfp_client - - -def print_function_name_decorator(func): - def wrapper(*args, **kwargs): - print() - print(f"---[ {func.__name__}{args}{kwargs} ]---") - print() - return func(*args, **kwargs) - return wrapper - - -@print_function_name_decorator -def list_runs(experiment_name: str = None): - - kfp_client = get_kfp_client() - - experiments = [] - - if experiment_name: - - # https://github.com/kubeflow/pipelines/blob/3e7a89e044d0ce448ce0b7b2c894a483487694a1/backend/api/filter.proto#L24-L63 - experiment_filter_dict = { - "predicates": [{ - "key": "name", - "op": "IS_SUBSTRING", # "EQUALS", - "string_value": experiment_name - }] - } - - experiment_response: ApiListExperimentsResponse = kfp_client._experiment_api.\ - list_experiment(page_size=100, - sort_by="created_at desc", - filter=json.dumps(experiment_filter_dict)) - - if experiment_response.experiments: - experiments = [e for e in experiment_response.experiments if experiment_name in e.name] - else: - print(f"Experiment(s) with name '{experiment_name}' do(es) not exist.") - - runs = [] - - if experiments: - for experiment in experiments: - run_response: ApiListRunsResponse = \ - kfp_client._run_api.list_runs(page_size=100, - sort_by="created_at desc", - resource_reference_key_type=ApiResourceType.EXPERIMENT, - resource_reference_key_id=experiment.id) - - runs.extend(run_response.runs or []) - - else: - run_response: ApiListRunsResponse = \ - kfp_client._run_api.list_runs(page_size=100, sort_by="created_at desc") - - runs.extend(run_response.runs or []) - - runs = sorted(runs, key=lambda r: r.created_at, reverse=True) - for i, r in enumerate(runs): - # pprint(r) - print("%2i: %s %s %s (%s)" % (i+1, r.id, r.created_at.strftime("%Y-%m-%d %H:%M:%S"), r.name, r.status)) - - return runs - - -@print_function_name_decorator -def stop_run(run_id): - - kfp_client = get_kfp_client() - - try: - run_stop_response = kfp_client._run_api.terminate_run(run_id=run_id) - pprint(run_stop_response) - - except ApiException as e: - - if e.status == 404: - - run_detail: ApiRunDetail = kfp_client._run_api.get_run(run_id=run_id) - - if run_detail: # and run_detail.run.status in ["Failed", "Error"]: - workflow_manifest = json.loads(run_detail.pipeline_runtime.workflow_manifest) - # pods = filter(lambda d: d["type"] == 'Pod', list(workflow_manifest["status"]["nodes"].values())) - pods = [node for node in list(workflow_manifest["status"]["nodes"].values()) if node["type"] == "Pod"] - if pods: - print(f"{e.status}, {e.reason}: {pods[0]['message']}") - else: - print(f"Run with id '{run_id}' could not be terminated. No pods in 'Running' state?") - else: - print(e) - - -@print_function_name_decorator -def delete_run(run_id): - - kfp_client: kfp.Client = get_kfp_client() - - try: - run_delete_response = kfp_client._run_api.delete_run(id=run_id) - pprint(run_delete_response) - - except AttributeError as e: - # ignore KFP AttributeError. It is a bug in the Swagger-generated client code for Kubeflow Pipelines - if not str(e) == "module 'kfp_run.models' has no attribute 'ERRORUNKNOWN'": - raise e - - except ApiException as e: - - if e.status == 404: - - run_detail: ApiRunDetail = kfp_client._run_api.get_run(run_id=run_id) - - if run_detail: # and run_detail.run.status in ["Failed", "Error"]: - workflow_manifest = json.loads(run_detail.pipeline_runtime.workflow_manifest) - # pods = filter(lambda d: d["type"] == 'Pod', list(workflow_manifest["status"]["nodes"].values())) - pods = [node for node in list(workflow_manifest["status"]["nodes"].values()) if node["type"] == "Pod"] - if pods: - print(pods[0]["message"]) - else: - print(f"Run with id '{run_id}' could not be deleted. No corresponding pods.") - else: - print(e) - - -if __name__ == '__main__': - - # runs = list_runs() - # runs = list_runs(experiment_name="COMPONENT_RUNS") - # runs = list_runs(experiment_name="MODEL_RUNS") - runs = list_runs(experiment_name="_RUN") - - for r in runs[-5:]: - # stop_run(r.id) - delete_run(r.id) diff --git a/api/examples/settings_api.py b/api/examples/settings_api.py deleted file mode 100644 index 39cc446d..00000000 --- a/api/examples/settings_api.py +++ /dev/null @@ -1,119 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -from __future__ import print_function - -import json -import os -import swagger_client - -from os import environ as env -from pprint import pprint -from swagger_client.api_client import ApiClient, Configuration -from swagger_client.models import ApiSettings, ApiSettingsSection, ApiParameter -from swagger_client.rest import ApiException -from sys import stderr -from urllib3.response import HTTPResponse - - -host = '127.0.0.1' -port = '8080' -# host = env.get("MLX_API_SERVICE_HOST") -# port = env.get("MLX_API_SERVICE_PORT") - -api_base_path = 'apis/v1alpha1' - - -def get_swagger_client(): - config = Configuration() - config.host = f'http://{host}:{port}/{api_base_path}' - api_client = ApiClient(configuration=config) - return api_client - - -def print_function_name_decorator(func): - def wrapper(*args, **kwargs): - print() - print(f"---[ {func.__name__}{args}{kwargs} ]---") - print() - return func(*args, **kwargs) - return wrapper - - -@print_function_name_decorator -def get_app_settings(): - - api_client = get_swagger_client() - api_instance = swagger_client.ApplicationSettingsApi(api_client=api_client) - - try: - api_settings: ApiSettings = api_instance.get_application_settings() - pprint(api_settings, indent=2) - return api_settings - - except ApiException as e: - print(f"Exception when calling {api_instance.__class__.__name__}: %s\n" % e, file=stderr) - raise e - - return None - - -@print_function_name_decorator -def modify_app_settings(dictionary: dict): - - api_client = get_swagger_client() - api_instance = swagger_client.ApplicationSettingsApi(api_client=api_client) - - try: - api_settings: ApiSettings = api_instance.modify_application_settings(dictionary) - pprint(api_settings, indent=2) - return api_settings - - except ApiException as e: - print(f"Exception when calling {api_instance.__class__.__name__}: %s\n" % e, file=stderr) - raise e - - return None - - -@print_function_name_decorator -def set_app_settings(api_settings: ApiSettings): - - api_client = get_swagger_client() - api_instance = swagger_client.ApplicationSettingsApi(api_client=api_client) - - try: - api_settings: ApiSettings = api_instance.set_application_settings(api_settings) - pprint(api_settings, indent=2) - return api_settings - - except ApiException as e: - print(f"Exception when calling {api_instance.__class__.__name__}: %s\n" % e, file=stderr) - raise e - - return None - - -def main(): - settings = get_app_settings() - - modify_app_settings({ - "Upload enabled": False, - "API endpoint": "localhost:8080" - }) - - settings.sections += [ - ApiSettingsSection( - name="General", - description="General settings", - settings=[ - ApiParameter("Color scheme", 'Color scheme [blue, red, yellow]', 'blue', 'red') - ] - ) - ] - - set_app_settings(settings) - - -if __name__ == '__main__': - main() diff --git a/api/generate_code.sh b/api/generate_code.sh deleted file mode 100755 index de60459d..00000000 --- a/api/generate_code.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env bash - -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -# define global variables -REPO_URL="https://github.com/machine-learning-exchange/mlx.git" -SCRIPT_DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd)" -PROJECT_DIR="${TRAVIS_BUILD_DIR:-$(cd "${SCRIPT_DIR%/api}"; pwd)}" -TEMP_DIR="${PROJECT_DIR}/temp" -CLONE_DIR="${TEMP_DIR}/mlx_main_latest" -VERSION="main" - - -#mkdir -p "${CLONE_DIR}" -#git --work-tree="${CLONE_DIR}" checkout HEAD -- api -#cd "${CLONE_DIR}" - -clone_repo_to_tempdir() { - if [ ! -d "${CLONE_DIR}" ]; then - echo "========================================================================" - echo "Clone repo into temp dir ..." - echo "========================================================================" - git clone "${REPO_URL}" "${CLONE_DIR}" -b "${VERSION}" \ - -c advice.detachedHead=false \ - -c core.sparseCheckout=true \ - --no-checkout \ - --depth=1 \ - --filter=blob:none #-q - cd "${CLONE_DIR}" - git config core.sparseCheckout true - echo "api/*" > .git/info/sparse-checkout - echo "tools/*" >> .git/info/sparse-checkout - git checkout main #-- api - cd - &> /dev/null - else - echo "Get latest commit from main ..." - cd "${CLONE_DIR}" - git fetch origin # -q - git -c advice.detachedHead=false checkout "${VERSION}" -f -- api tools #-q - cd - &> /dev/null - fi -} - -generate_reverse_patch_for_undesired_codegen_results() { - clone_repo_to_tempdir - echo "========================================================================" - echo "Generate reverse-patch for undesired codegen results ..." - echo "========================================================================" - cd "${CLONE_DIR}" - ./api/codegen.sh || exit 1 - ./tools/bash/add_license_headers.sh || exit 1 - #git diff --output="${TEMP_DIR}/undesired_codegen_results_$(date +"%Y-%m-%d").patch" - git diff -R --output="${TEMP_DIR}/revert_undesired_codegen_results_$(date +"%Y-%m-%d").patch" - #git checkout . # undo local changes - #git clean -fd # delete untracked files/directories - cd - &> /dev/null -} - -generate_code() { - echo "========================================================================" - echo "Generate API code ..." - echo "========================================================================" - cd "${PROJECT_DIR}" - ./api/codegen.sh || exit 1 - ./tools/bash/add_license_headers.sh || exit 1 -} - -revert_undesired_codegen_results() { - generate_reverse_patch_for_undesired_codegen_results - echo "========================================================================" - echo "Revert undesired codegen results ..." - echo "========================================================================" - cd "${PROJECT_DIR}" - #git apply --whitespace=nowarn --reverse "${TEMP_DIR}/undesired_codegen_results_$(date +"%Y-%m-%d").patch" - git apply --reject --whitespace=fix "${TEMP_DIR}/revert_undesired_codegen_results_$(date +"%Y-%m-%d").patch" - echo "========================================================================" - echo "Files with undesired changes that could not be reverted:" - echo "========================================================================" - find . -name "*.rej" -type f -} - -generate_code -revert_undesired_codegen_results - -echo "Done" diff --git a/api/requirements.txt b/api/requirements.txt deleted file mode 100644 index 04a59405..00000000 --- a/api/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -# we rely on requirements from client and server for local development - --r server/requirements.txt --r client/requirements.txt - --e server --e client - -#-r client/test-requirements.txt -#-r server/test-requirements.txt diff --git a/api/server/.dockerignore b/api/server/.dockerignore deleted file mode 100644 index 1634c40c..00000000 --- a/api/server/.dockerignore +++ /dev/null @@ -1,79 +0,0 @@ -.travis.yaml -.swagger-codegen-ignore -README.md -tox.ini -git_push.sh -test-requirements.txt -setup.py - -# Operating system files -.DS_Store - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class -**/*.pyc -**/__pycache__ - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*,cover -.hypothesis/ -venv/ -.venv/ -.python-version -test/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -#Ipython Notebook -.ipynb_checkpoints diff --git a/api/server/.gitignore b/api/server/.gitignore deleted file mode 100644 index a655050c..00000000 --- a/api/server/.gitignore +++ /dev/null @@ -1,64 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*,cover -.hypothesis/ -venv/ -.python-version - -# Translations -*.mo -*.pot - -# Django stuff: -*.log - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -#Ipython Notebook -.ipynb_checkpoints diff --git a/api/server/.swagger-codegen-ignore b/api/server/.swagger-codegen-ignore deleted file mode 100644 index 433f6725..00000000 --- a/api/server/.swagger-codegen-ignore +++ /dev/null @@ -1,37 +0,0 @@ -# Swagger Codegen Ignore -# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen - -# Use this file to prevent files from being overwritten by the generator. -# The patterns follow closely to .gitignore or .dockerignore. - -# As an example, the C# client generator defines ApiClient.cs. -# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line: -#ApiClient.cs - -# You can match any string of characters against a directory, file or extension with a single asterisk (*): -#foo/*/qux -# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux - -# You can recursively match patterns against a directory, file or extension with a double asterisk (**): -#foo/**/qux -# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux - -# You can also negate patterns with an exclamation (!). -# For example, you can ignore all files in a docs folder with the file extension .md: -#docs/*.md -# Then explicitly reverse the ignore rule for a single file: -#!docs/README.md - -swagger_server/models/base_model_.py -swagger_server/models/protobuf_any.py -#swagger_server/models/api_pipeline_extended.py -swagger_server/util.py -swagger_server/__main__.py - -.dockerignore -.travis.yml -Dockerfile -README.md -git_push.sh -requirements.txt -tox.ini diff --git a/api/server/.swagger-codegen/VERSION b/api/server/.swagger-codegen/VERSION deleted file mode 100644 index 752a79ef..00000000 --- a/api/server/.swagger-codegen/VERSION +++ /dev/null @@ -1 +0,0 @@ -2.4.8 \ No newline at end of file diff --git a/api/server/Dockerfile b/api/server/Dockerfile deleted file mode 100644 index 2bed256b..00000000 --- a/api/server/Dockerfile +++ /dev/null @@ -1,44 +0,0 @@ -FROM python:3.9-alpine - -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app - -COPY requirements.txt /usr/src/app/ - -# https://stackoverflow.com/questions/66118337/how-to-get-rid-of-cryptography-build-error -# ENV CRYPTOGRAPHY_DONT_BUILD_RUST 1 -# apk add gcc musl-dev python3-dev libffi-dev openssl-dev cargo - -RUN apk add --update --virtual build-dependencies \ - pkgconfig \ - openssl-dev \ - libffi-dev \ - musl-dev \ - make \ - gcc \ - g++ \ - curl \ - cargo \ - && apk add --update git \ - && curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl \ - && chmod +x kubectl \ - && mv kubectl /usr/local/bin \ - && pip install --upgrade pip \ - && pip install -r requirements.txt \ - && apk del --purge build-dependencies \ - && rm -rf \ - /var/cache/apk/* \ - /root/.cache \ - /tmp/* - -RUN pip list - -COPY . /usr/src/app - -RUN ls */* - -EXPOSE 8080 - -ENTRYPOINT ["python3"] - -CMD ["-m", "swagger_server"] diff --git a/api/server/README.md b/api/server/README.md deleted file mode 100644 index d8d507f1..00000000 --- a/api/server/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# MLX API Server - -## Overview - -The MLX API server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) -project. By using the [OpenAPI-Spec](https://github.com/swagger-api/swagger-core/wiki) from a remote -server, you can easily generate a server stub. This is an example of building a Swagger-enabled -Flask server. - -This example uses the [Connexion](https://github.com/zalando/connexion) library on top of Flask. - -## MLX API Server Modules - -| Python package/script | Purpose | -| ------------- | ------------- | -| `code_templates` | Code templates are used to generate sample Kubeflow pipeline DSL scripts for each asset type | -| `controllers` | Controllers are the code stubs (“interfaces”) for the API endpoints generated by Swagger | -| `controllers_impl` | Controller implementation of the generated API code stubs (“interfaces”), originally copied from respective controller and then filled in with the actual business logic. API calls get forwarded from the `controllers` to the `controllers_impl` by injection of some code magic in `util.py` (see `codegen.sh`) | -| `data_access` | Contains 2 clients - MySQL (relational database) and Minio (object storage) for data access | -| `gateways` | Connects the API server to various services on the Kubernetes cluster like KFServing, Kubeflow Pipelines, and the Kubernetes API | -| `models` | Swagger generated API classes used to transfer data between API client and API server | -| `encoder.py` | Implementation of JSON encoder (generated by Swagger) | -| `util.py` | Collection of helper functions, most notably to “glue” the API `controllers` code stubs to the `controllers_impl` API implementations | - -## Requirements - -Python 3.6.1+ - -## Usage - -To run the server, please execute the following from the root directory: - -``` -pip3 install -r requirements.txt -python3 -m swagger_server -``` - -Then open the following URL in your web browser: - -``` -http://localhost:8080/apis/v1alpha1/ui/ -``` - -Your Swagger definition lives here: - -``` -http://localhost:8080/apis/v1alpha1/swagger.json -``` - -To launch the integration tests, use tox: - -``` -sudo pip install tox -tox -``` - -## Running with Docker - -To run the server on a Docker container, please execute the following from the root directory: - -```bash -# building the image -docker build -t swagger_server . - -# starting up a container -docker run -p 8080:8080 swagger_server -``` diff --git a/api/server/application_settings.yaml b/api/server/application_settings.yaml deleted file mode 100644 index b2419748..00000000 --- a/api/server/application_settings.yaml +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -# Application settings for Machine Learning Exchange - -sections: - - name: "Connections" - description: "Service endpoints" - settings: - - name: "API Endpoint" - description: "Machine Learning Exchange API endpoint" - default: "" - value: "" - - name: "KFP API" - description: "Kubeflow Pipelines API endpoint" - default: "" - value: "" - - name: "Kfserving" - description: "Kfserving specific settings" - settings: - - name: "Namespace" - description: "Namespace to fetch the inference services from" - default: "" - value: "" - - name: "Capabilities" - description: "General application capabilities" - settings: - - name: "Upload enabled" - description: "Allow the upload of artifacts" - default: yes - value: on - - name: "Execution enabled" - description: "Allow the execution of sample pipelines" - default: yes - value: on - - name: "Experimental features enabled" - description: "Enable experimental features." - default: no - value: off - - name: "Appearance" - description: "Settings to modify the appearance of the web user interface." - settings: - - name: "Cards per page" - description: "Number of cards displayed on one page" - default: 10 - value: 10 - - name: "Artifact Types" - description: "Settings to modify the available artifact types in web user interface." - settings: - - name: "Pipelines" - description: "Enable or Disable the Pipelines section" - default: yes - value: on - - name: "Datasets" - description: "Enable or Disable the Datasets section" - default: yes - value: on - - name: "Components" - description: "Enable or Disable the Components section" - default: yes - value: on - - name: "Models" - description: "Enable or Disable the Models section" - default: yes - value: on - - name: "Notebooks" - description: "Enable or Disable the Notebooks section" - default: yes - value: on - - name: "Workspace" - description: "Enable or Disable the Workspace section" - default: yes - value: on - - name: "Inference Services" - description: "Enable or Disable the Inference Services section" - default: no - value: off diff --git a/api/server/mlx-api.yml b/api/server/mlx-api.yml deleted file mode 100644 index 32f0cbd2..00000000 --- a/api/server/mlx-api.yml +++ /dev/null @@ -1,183 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -apiVersion: v1 -kind: Service -metadata: - name: mlx-api - namespace: kubeflow - labels: - service: mlx-api - environment: dev - annotations: - getambassador.io/config: |- - --- - apiVersion: ambassador/v0 - kind: Mapping - name: mlx-api - prefix: /apis - rewrite: /apis - timeout_ms: 300000 - service: mlx-api.kubeflow - use_websocket: true -spec: - type: NodePort - ports: - - name: mlx-api - port: 80 - targetPort: 8080 - selector: - service: mlx-api ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: mlx-api - namespace: kubeflow - labels: - service: mlx-api - environment: dev -spec: - selector: - matchLabels: - service: mlx-api - environment: dev - replicas: 1 - template: - metadata: - labels: - service: mlx-api - environment: dev - version: v0.1.29 - spec: - serviceAccountName: mlx-api - containers: - - name: mlx-api-server - image: docker.io/mlexchange/mlx-api:nightly-main - imagePullPolicy: Always - ports: - - containerPort: 8080 - env: - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - resources: - limits: - cpu: 250m - memory: 256Mi - livenessProbe: - httpGet: - path: /apis/v1alpha1/health_check?check_database=true&check_object_store=true - port: 8080 - initialDelaySeconds: 120 - timeoutSeconds: 10 - periodSeconds: 60 - failureThreshold: 3 ---- -apiVersion: rbac.authorization.k8s.io/v1beta1 -kind: ClusterRoleBinding -metadata: - name: mlx-api-access -subjects: -- kind: ServiceAccount - name: mlx-api - namespace: kubeflow -roleRef: - kind: ClusterRole - name: mlx-api-access - apiGroup: rbac.authorization.k8s.io ---- -kind: ClusterRole -apiVersion: rbac.authorization.k8s.io/v1 -metadata: - name: mlx-api-access -rules: -- apiGroups: [""] - resources: ["pods", "pods/log", "secrets", "events", "serviceaccounts", "configmaps", - "persistentvolumeclaims", "limitranges"] - verbs: ["get", "list", "create", "update", "delete", "patch", "watch"] -- apiGroups: ["serving.kubeflow.org"] - resources: ["inferenceservices"] - verbs: ["get", "list", "create", "update", "delete", "patch", "watch"] -- apiGroups: ["serving.knative.dev"] - resources: ["services", "revisions", "configurations"] - verbs: ["get", "list", "create", "update", "delete", "patch", "watch"] ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: mlx-api - namespace: kubeflow ---- -apiVersion: rbac.istio.io/v1alpha1 -kind: ServiceRole -metadata: - name: mlx-api - namespace: kubeflow -spec: - rules: - - services: - - mlx-api.kubeflow.svc.cluster.local ---- -apiVersion: rbac.istio.io/v1alpha1 -kind: ServiceRoleBinding -metadata: - name: bind-gateway-mlx-api - namespace: kubeflow -spec: - roleRef: - kind: ServiceRole - name: mlx-api - subjects: - - properties: - source.namespace: istio-system - - properties: - source.principal: cluster.local/ns/kubeflow/sa/mlx-ui ---- -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: mlx-api - namespace: kubeflow -spec: - gateways: - - kubeflow-gateway - hosts: - - '*' - http: - - match: - - uri: - prefix: /apis/v1alpha1 - rewrite: - uri: /apis/v1alpha1 - route: - - destination: - host: mlx-api.kubeflow.svc.cluster.local - port: - number: 80 - timeout: 300s ---- -apiVersion: networking.istio.io/v1alpha3 -kind: DestinationRule -metadata: - name: mlx-api - namespace: kubeflow -spec: - host: mlx-api.kubeflow.svc.cluster.local - trafficPolicy: - tls: - mode: ISTIO_MUTUAL ---- -apiVersion: rbac.istio.io/v1alpha1 -kind: ServiceRoleBinding -metadata: - name: bind-mlx-api-internal - namespace: kubeflow -spec: - roleRef: - kind: ServiceRole - name: ml-pipeline-services - subjects: - - properties: - source.principal: cluster.local/ns/kubeflow/sa/mlx-api diff --git a/api/server/requirements.in b/api/server/requirements.in deleted file mode 100644 index 0389562a..00000000 --- a/api/server/requirements.in +++ /dev/null @@ -1,26 +0,0 @@ -# requirements are grouped in blocks that are related -# to find the last set of compatible requirement versions run: -# docker run mlexchange/mlx-api:nightly-main /usr/local/bin/pip freeze - -kfp-tekton==1.1.1 -elyra-server<3.4.0 # elyra-server>=3.4.0 requires minio>7.0.0 which breaks mlx-api code -kfserving - -requests>=2.25.0 -Werkzeug>=1.0.1 -python_dateutil>=2.8.1 -connexion[swagger-ui]>=2.7.0 -flask-cors>=2.1.2 # https://github.com/corydolphin/flask-cors/issues/138 -waitress>=2.0.0 - -PyYaml>=5.3.1 -mysql-connector-python>=8.0.22 -minio<7.0.0 # TODO: fix import error after 6.0.2 (https://github.com/minio/minio-py/pull/968) - -ai_pipeline_params>=0.0.3 -autopep8>=1.5.4 - -# the following are upstream depdencies but we need to force version conflict resolution -Flask>=1.1.4,<2.0.0 # Flask>2.0.0 requires Werkzeug>=2.0, but connexion[swagger-ui]==2.9.0 requires werkzeug<2.0,>=1.0 -python-lsp-server[all]<1.3.0 # * from elyra-server, 1.3.0 requires autopep8>=1.6.0 but elyra-server==3.3.0 requires autopep8<1.5.6 -black==21.12b0 # * from elyra-server, 22.1.0 requires click>=8.0.0 which breaks kfp 1.7.1 and Flask 1.1.4 diff --git a/api/server/requirements.txt b/api/server/requirements.txt deleted file mode 100644 index 69f21563..00000000 --- a/api/server/requirements.txt +++ /dev/null @@ -1,638 +0,0 @@ -# -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: -# -# pip-compile --output-file=requirements.txt requirements.in -# -absl-py==0.11.0 - # via kfp -adal==1.2.7 - # via kfserving -ai-pipeline-params==0.0.3 - # via -r requirements.in -ansiwrap==0.8.4 - # via papermill -anyio==3.5.0 - # via jupyter-server -argon2-cffi==21.3.0 - # via - # jupyter-server - # notebook -argon2-cffi-bindings==21.2.0 - # via argon2-cffi -argparse==1.4.0 - # via kfserving -astroid==2.6.6 - # via pylint -asttokens==2.0.5 - # via stack-data -attrs==21.4.0 - # via jsonschema -autopep8==1.5.5 - # via - # -r requirements.in - # elyra-server - # python-lsp-server -avro==1.11.0 - # via kfserving -azure-common==1.1.27 - # via - # azure-storage-blob - # azure-storage-common -azure-storage-blob==2.1.0 - # via kfserving -azure-storage-common==2.1.0 - # via azure-storage-blob -babel==2.9.1 - # via jupyterlab-server -backcall==0.2.0 - # via ipython -black==21.12b0 - # via - # -r requirements.in - # elyra-server - # ipython -bleach==4.1.0 - # via nbconvert -cachetools==4.2.4 - # via google-auth -certifi==2021.10.8 - # via - # kfp-server-api - # kfserving - # kubernetes - # minio - # requests -cffi==1.15.0 - # via - # argon2-cffi-bindings - # cryptography - # pynacl -charset-normalizer==2.0.10 - # via requests -click==7.1.2 - # via - # black - # clickclick - # elyra-server - # flask - # kfp - # papermill -clickclick==20.10.2 - # via connexion -cloudevents==1.2.0 - # via kfserving -cloudpickle==1.6.0 - # via kfp -colorama==0.4.4 - # via - # elyra-server - # nbdime -configparser==5.2.0 - # via minio -connexion[swagger-ui]==2.10.0 - # via -r requirements.in -cryptography==36.0.1 - # via - # adal - # azure-storage-common -debugpy==1.5.1 - # via ipykernel -decorator==5.1.1 - # via ipython -defusedxml==0.7.1 - # via nbconvert -deprecated==1.2.13 - # via - # kfp - # pygithub -deprecation==2.1.0 - # via cloudevents -docstring-parser==0.13 - # via kfp -elyra-server==3.2.1 - # via -r requirements.in -entrypoints==0.3 - # via - # elyra-server - # jupyter-client - # jupyter-lsp - # jupyterlab-server - # nbconvert - # papermill -executing==0.8.2 - # via stack-data -fire==0.4.0 - # via kfp -flake8==3.9.2 - # via python-lsp-server -flask==1.1.4 - # via - # -r requirements.in - # connexion - # flask-cors -flask-cors==3.0.10 - # via -r requirements.in -gitdb==4.0.9 - # via gitpython -gitpython==3.1.26 - # via nbdime -google-api-core==2.4.0 - # via - # google-api-python-client - # google-cloud-core - # google-cloud-storage -google-api-python-client==1.12.10 - # via kfp -google-auth==1.35.0 - # via - # google-api-core - # google-api-python-client - # google-auth-httplib2 - # google-cloud-core - # google-cloud-storage - # kfp - # kubernetes -google-auth-httplib2==0.1.0 - # via google-api-python-client -google-cloud-core==2.2.2 - # via google-cloud-storage -google-cloud-storage==1.44.0 - # via - # kfp - # kfserving -google-crc32c==1.3.0 - # via google-resumable-media -google-resumable-media==2.1.0 - # via google-cloud-storage -googleapis-common-protos==1.54.0 - # via google-api-core -httplib2==0.20.2 - # via - # google-api-python-client - # google-auth-httplib2 -idna==3.3 - # via - # anyio - # requests -inflection==0.5.1 - # via connexion -ipykernel==6.7.0 - # via notebook -ipython==8.0.1 - # via - # ipykernel - # jupyterlab -ipython-genutils==0.2.0 - # via notebook -isodate==0.6.1 - # via openapi-schema-validator -isort==5.10.1 - # via pylint -itsdangerous==1.1.0 - # via flask -jedi==0.18.1 - # via - # ipython - # python-lsp-server -jinja2==2.11.3 - # via - # elyra-server - # flask - # jupyter-server - # jupyterlab - # jupyterlab-server - # nbconvert - # nbdime - # notebook - # swagger-ui-bundle -json5==0.9.6 - # via jupyterlab-server -jsonschema==3.2.0 - # via - # connexion - # elyra-server - # jupyterlab-server - # kfp - # nbformat - # openapi-schema-validator - # openapi-spec-validator -jupyter-client==7.1.2 - # via - # elyra-server - # ipykernel - # jupyter-server - # nbclient - # notebook -jupyter-core==4.9.1 - # via - # elyra-server - # jupyter-client - # jupyter-server - # jupyterlab - # nbconvert - # nbformat - # notebook -jupyter-lsp==1.5.1 - # via jupyterlab-lsp -jupyter-resource-usage==0.6.1 - # via elyra-server -jupyter-server==1.15.4 - # via - # elyra-server - # jupyter-lsp - # jupyter-resource-usage - # jupyter-server-mathjax - # jupyterlab - # jupyterlab-git - # jupyterlab-server - # nbclassic - # nbdime -jupyter-server-mathjax==0.2.3 - # via nbdime -jupyterlab==3.2.8 - # via - # elyra-server - # jupyterlab-lsp -jupyterlab-git==0.34.2 - # via elyra-server -jupyterlab-lsp==3.10.0 - # via elyra-server -jupyterlab-pygments==0.1.2 - # via nbconvert -jupyterlab-server==2.10.3 - # via jupyterlab -kfp==1.7.1 - # via - # ai-pipeline-params - # elyra-server - # kfp-tekton -kfp-pipeline-spec==0.1.13 - # via kfp -kfp-server-api==1.7.1 - # via kfp -kfp-tekton==1.1.1 - # via -r requirements.in -kfserving==0.5.1 - # via -r requirements.in -kubernetes==12.0.1 - # via - # ai-pipeline-params - # kfp - # kfserving -lazy-object-proxy==1.7.1 - # via astroid -markupsafe==2.0.1 - # via jinja2 -matplotlib-inline==0.1.3 - # via - # ipykernel - # ipython -mccabe==0.6.1 - # via - # flake8 - # pylint - # python-lsp-server -minio==6.0.2 - # via - # -r requirements.in - # elyra-server - # kfserving -mistune==0.8.4 - # via nbconvert -mypy-extensions==0.4.3 - # via black -mysql-connector-python==8.0.28 - # via -r requirements.in -nbclassic==0.3.5 - # via jupyterlab -nbclient==0.5.10 - # via - # elyra-server - # nbconvert - # papermill -nbconvert==6.4.1 - # via - # elyra-server - # jupyter-server - # notebook -nbdime==3.1.1 - # via - # elyra-server - # jupyterlab-git -nbformat==5.2.0 - # via - # elyra-server - # jupyter-server - # jupyterlab-git - # nbclient - # nbconvert - # nbdime - # notebook - # papermill -nest-asyncio==1.5.4 - # via - # ipykernel - # jupyter-client - # nbclient - # notebook -networkx==2.6.3 - # via elyra-server -notebook==6.4.10 - # via nbclassic -numpy==1.22.1 - # via - # kfserving - # table-logger -oauthlib==3.1.1 - # via requests-oauthlib -openapi-schema-validator==0.1.6 - # via openapi-spec-validator -openapi-spec-validator==0.3.3 - # via connexion -packaging==21.3 - # via - # bleach - # deprecation - # jupyter-server - # jupyterlab - # jupyterlab-git - # jupyterlab-server -pandocfilters==1.5.0 - # via nbconvert -papermill==2.3.4 - # via elyra-server -parso==0.8.3 - # via jedi -pathspec==0.9.0 - # via black -pexpect==4.8.0 - # via - # ipython - # jupyterlab-git -pickleshare==0.7.5 - # via ipython -platformdirs==2.4.1 - # via black -pluggy==1.0.0 - # via python-lsp-server -prometheus-client==0.13.1 - # via - # jupyter-resource-usage - # jupyter-server - # notebook -prompt-toolkit==3.0.26 - # via ipython -protobuf==3.19.4 - # via - # google-api-core - # google-cloud-storage - # googleapis-common-protos - # kfp - # kfp-pipeline-spec - # mysql-connector-python -psutil==5.9.0 - # via jupyter-resource-usage -ptyprocess==0.7.0 - # via - # pexpect - # terminado -pure-eval==0.2.2 - # via stack-data -pyasn1==0.4.8 - # via - # pyasn1-modules - # rsa -pyasn1-modules==0.2.8 - # via google-auth -pycodestyle==2.7.0 - # via - # autopep8 - # flake8 - # python-lsp-server -pycparser==2.21 - # via cffi -pydocstyle==6.1.1 - # via python-lsp-server -pyflakes==2.3.1 - # via - # flake8 - # python-lsp-server -pygithub==1.55 - # via elyra-server -pygments==2.11.2 - # via - # ipython - # jupyterlab-pygments - # nbconvert - # nbdime -pyjwt==2.3.0 - # via - # adal - # pygithub -pylint==2.9.6 - # via python-lsp-server -pynacl==1.5.0 - # via pygithub -pyparsing==3.0.7 - # via - # httplib2 - # packaging -pyrsistent==0.16.1 - # via - # jsonschema - # openapi-spec-validator -python-dateutil==2.8.2 - # via - # -r requirements.in - # adal - # azure-storage-common - # jupyter-client - # kfp-server-api - # kfserving - # kubernetes - # minio -python-lsp-jsonrpc==1.0.0 - # via python-lsp-server -python-lsp-server[all]==1.2.4 - # via - # -r requirements.in - # elyra-server -pytz==2021.3 - # via - # babel - # minio -pyyaml==5.4.1 - # via - # -r requirements.in - # clickclick - # connexion - # elyra-server - # kfp - # kubernetes - # openapi-spec-validator - # papermill -pyzmq==22.3.0 - # via - # jupyter-client - # jupyter-server - # notebook -requests==2.27.1 - # via - # -r requirements.in - # adal - # azure-storage-common - # connexion - # elyra-server - # google-api-core - # google-cloud-storage - # jupyterlab-server - # kubernetes - # nbdime - # papermill - # pygithub - # requests-oauthlib - # requests-toolbelt -requests-oauthlib==1.3.0 - # via kubernetes -requests-toolbelt==0.9.1 - # via kfp -rfc3986-validator==0.1.1 - # via elyra-server -rope==0.22.0 - # via python-lsp-server -rsa==4.8 - # via google-auth -send2trash==1.8.0 - # via - # jupyter-server - # notebook -six==1.16.0 - # via - # absl-py - # asttokens - # bleach - # fire - # flask-cors - # google-api-python-client - # google-auth - # google-auth-httplib2 - # google-cloud-storage - # isodate - # jsonschema - # kfp-server-api - # kfserving - # kubernetes - # openapi-schema-validator - # openapi-spec-validator - # pyrsistent - # python-dateutil -smmap==5.0.0 - # via gitdb -sniffio==1.2.0 - # via anyio -snowballstemmer==2.2.0 - # via pydocstyle -stack-data==0.1.4 - # via ipython -strip-hints==0.1.10 - # via kfp -swagger-ui-bundle==0.0.9 - # via connexion -table-logger==0.3.6 - # via kfserving -tabulate==0.8.9 - # via kfp -tenacity==8.0.1 - # via papermill -termcolor==1.1.0 - # via - # fire - # yaspin -terminado==0.13.1 - # via - # jupyter-server - # notebook -testpath==0.5.0 - # via nbconvert -textwrap3==0.9.2 - # via ansiwrap -toml==0.10.2 - # via - # autopep8 - # pylint -tomli==1.2.3 - # via black -tornado==6.1 - # via - # elyra-server - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # kfserving - # nbdime - # notebook - # terminado -tqdm==4.62.3 - # via papermill -traitlets==5.1.1 - # via - # elyra-server - # ipykernel - # ipython - # jupyter-client - # jupyter-core - # jupyter-server - # matplotlib-inline - # nbclient - # nbconvert - # nbformat - # notebook -typing-extensions==4.0.1 - # via black -ujson==5.1.0 - # via - # python-lsp-jsonrpc - # python-lsp-server -uritemplate==3.0.1 - # via google-api-python-client -urllib3==1.26.8 - # via - # elyra-server - # kfp-server-api - # kfserving - # kubernetes - # minio - # requests -waitress==2.1.1 - # via -r requirements.in -watchdog==2.1.6 - # via elyra-server -wcwidth==0.2.5 - # via prompt-toolkit -webencodings==0.5.1 - # via bleach -websocket-client==1.2.3 - # via - # elyra-server - # jupyter-server - # kubernetes -werkzeug==1.0.1 - # via - # -r requirements.in - # connexion - # flask -wheel==0.37.1 - # via strip-hints -wrapt==1.12.1 - # via - # astroid - # deprecated -yapf==0.32.0 - # via python-lsp-server -yaspin==2.1.0 - # via elyra-server - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/api/server/setup.py b/api/server/setup.py deleted file mode 100644 index dd85d1cc..00000000 --- a/api/server/setup.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from setuptools import setup, find_packages - -NAME = "mlx-api" -VERSION = "0.1.30-upload-catalog-from-url" - -# To install the library, run the following -# -# python setup.py install -# -# prerequisite: setuptools -# http://pypi.python.org/pypi/setuptools - -# TODO: use/parse requirements.txt and include requirements.txt in MANIFEST.in -REQUIRES = ["connexion"] - -setup( - name=NAME, - version=VERSION, - description="MLX Server API", - author_email="", - url="https://github.com/machine-learning-exchange/mlx", - keywords=["Swagger", "MLX API"], - install_requires=REQUIRES, - packages=find_packages(), - package_data={'': ['swagger/swagger.yaml']}, - include_package_data=True, - entry_points={ - 'console_scripts': ['swagger_server=swagger_server.__main__:main']}, - long_description="""\ - Machine Learning Exchange API - """ -) - diff --git a/api/server/swagger_server/__init__.py b/api/server/swagger_server/__init__.py deleted file mode 100644 index d04a4108..00000000 --- a/api/server/swagger_server/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -VERSION = "0.1.30-upload-catalog-from-url" diff --git a/api/server/swagger_server/__main__.py b/api/server/swagger_server/__main__.py deleted file mode 100644 index 73a98b60..00000000 --- a/api/server/swagger_server/__main__.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import logging - -from datetime import datetime -from flask import redirect, request -from flask_cors import CORS -from os import environ as env -from swagger_server import encoder -from swagger_server import VERSION -from waitress import serve -from threading import current_thread - - -def get_request_log_msg(): - return '(%03d) %s %s %s ...' % (current_thread().ident % 1000, request.remote_addr, - request.method, request.full_path) - - -def main(): - - logging.basicConfig(format="%(asctime)s.%(msecs)03d %(levelname)-7s [%(name)-.8s] %(message)s", - datefmt="%Y/%m/%d %H:%M:%S", - level=env.get("LOGLEVEL", logging.INFO)) - - log = logging.getLogger("flaskapp") - - log.info("MLX API version: %s" % VERSION) - - cx_app = connexion.App(__name__, specification_dir='./swagger/') - cx_app.add_api('swagger.yaml', arguments={'title': 'MLX API'}) - - flask_app = cx_app.app - flask_app.json_encoder = encoder.JSONEncoder - - log.info("Enable cross-origin support with 'flask-cors': origins='*'") - CORS(flask_app, origins='*') - - start_times = dict() - - @flask_app.before_request - def before_request(): - msg = get_request_log_msg() - log.info(msg) - start_times[msg] = datetime.now() - - @flask_app.after_request - def after_request(response): - msg = get_request_log_msg() - time_delta = datetime.now() - start_times.pop(msg) - elapsed_millis = time_delta.seconds * 1000 + time_delta.microseconds / 1000 - outstanding_requests = len(start_times) - log_func = get_log_method_by_response_status(response) - log_func('%s %s (%i ms) [%i]', msg, response.status, elapsed_millis, outstanding_requests) - return response - - log_functions = [log.info, log.info, log.info, log.info, log.warning, log.error] - - def get_log_method_by_response_status(response): - log_level_idx = response.status_code // 100 - log_func = log_functions[log_level_idx] - return log_func - - @flask_app.route("/") - def index(): - return redirect("/apis/v1alpha1/ui/#!/", code=302) - - # cx_app.run(port=8080) - serve(flask_app, host="0.0.0.0", port=8080, threads=32) - - -if __name__ == '__main__': - main() diff --git a/api/server/swagger_server/code_templates/run_component.TEMPLATE.py b/api/server/swagger_server/code_templates/run_component.TEMPLATE.py deleted file mode 100644 index 06cab0bf..00000000 --- a/api/server/swagger_server/code_templates/run_component.TEMPLATE.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from kfp import dsl -from kfp_tekton.compiler import TektonCompiler -from kfp_tekton import TektonClient -from os import path -from tempfile import gettempdir - - -############################################################ -# Define the pipeline method -############################################################ - -@dsl.pipeline( - name='${name}', - description='${description}' -) -def kfp_component_pipeline(${pipeline_method_args}): - - from kfp import components - - template_url = '${component_template_url}' - - comp = components.load_component_from_url(template_url) - - op = comp(${parameter_names}) - - -############################################################ -# Compile the pipeline -############################################################ - -pipeline_function = kfp_component_pipeline -pipeline_filename = path.join(gettempdir(), - pipeline_function.__name__ + '.pipeline.tar.gz') - -TektonCompiler().compile(pipeline_function, pipeline_filename) - -############################################################ -# Run the pipeline -############################################################ - -# TODO: specify pipeline argument values -arguments = ${parameter_dict} - -client = TektonClient(${pipeline_server}) - -# Get or create an experiment and submit a pipeline run -experiment = client.create_experiment('COMPONENT_RUNS') - -# Submit the experiment to run in a pipeline -run_name = '${run_name}' -run_result = client.run_pipeline(experiment.id, run_name, pipeline_filename, arguments) diff --git a/api/server/swagger_server/code_templates/run_dataset.TEMPLATE.py b/api/server/swagger_server/code_templates/run_dataset.TEMPLATE.py deleted file mode 100644 index 25bdfbca..00000000 --- a/api/server/swagger_server/code_templates/run_dataset.TEMPLATE.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from kfp import dsl -from kfp_tekton.compiler import TektonCompiler -from kfp_tekton import TektonClient -from os import path -from tempfile import gettempdir - - -############################################################ -# Define the pipeline method -############################################################ - -@dsl.pipeline( - name='${name}', - description='${description}' -) -def dataset_pipeline(${pipeline_method_args}): - - from kfp.components import load_component_from_url - - dax_dataset_metadata_url = '${dataset_template_url}' - dax_to_dlf_component_url = '${dax_to_dlf_component_url}' - dlf_to_pvc_component_url = '${dlf_to_pvc_component_url}' - - dax_to_dlf_op = load_component_from_url(dax_to_dlf_component_url) - dlf_to_pvc_op = load_component_from_url(dlf_to_pvc_component_url) - - create_dlf_yaml = dax_to_dlf_op(dax_yaml=dax_dataset_metadata_url)\ - .set_image_pull_policy('Always')\ - .set_display_name("generate dataset metadata") - - mount_pvc = dlf_to_pvc_op(action='create', - namespace='${namespace}', - dataset_yaml=create_dlf_yaml.outputs['dlf_yaml'])\ - .set_image_pull_policy('Always')\ - .set_display_name("create persistent volume") - - -############################################################ -# Compile the pipeline -############################################################ - -pipeline_function = dataset_pipeline -pipeline_filename = path.join(gettempdir(), pipeline_function.__name__ + '.pipeline.tar.gz') - -TektonCompiler().compile(pipeline_function, pipeline_filename) - -############################################################ -# Run the pipeline -############################################################ - -# TODO: specify pipeline argument values -arguments = ${parameter_dict} - -client = TektonClient(${pipeline_server}) - -# Get or create an experiment and submit a pipeline run -experiment = client.create_experiment('DATASET_RUNS') - -# Submit the experiment to run in a pipeline -run_name = '${run_name}' -run_result = client.run_pipeline(experiment.id, run_name, pipeline_filename, arguments) diff --git a/api/server/swagger_server/code_templates/run_notebook.TEMPLATE.py b/api/server/swagger_server/code_templates/run_notebook.TEMPLATE.py deleted file mode 100644 index 71c1d1ac..00000000 --- a/api/server/swagger_server/code_templates/run_notebook.TEMPLATE.py +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from kfp import dsl -from kfp_tekton.compiler import TektonCompiler -from kfp_tekton import TektonClient -from os import path -from tempfile import gettempdir - - -############################################################ -# Define the pipeline method -############################################################ - -@dsl.pipeline( - name='${name}', - description='${description}' -) -def notebook_pipeline(): - """A pipeline to run a Jupyter notebook with elyra-ai/kfp-notebook and Papermill.""" - - from elyra.kfp.operator import ExecuteFileOp as NotebookOp - - notebook_op = NotebookOp(name="${name}", - pipeline_name="${name}", - experiment_name="NOTEBOOK_RUNS", - notebook="${notebook}", - cos_endpoint="${cos_endpoint}", - cos_bucket="${cos_bucket}", - cos_directory="${cos_directory}", - cos_dependencies_archive="${cos_dependencies_archive}", - requirements_url="${requirements_url}", - image="${image}") - - from kubernetes.client.models import V1EnvVar - - notebook_op.container.add_env_variable(V1EnvVar(name='AWS_ACCESS_KEY_ID', value="${cos_username}")) - notebook_op.container.add_env_variable(V1EnvVar(name='AWS_SECRET_ACCESS_KEY', value="${cos_password}")) - notebook_op.container.set_image_pull_policy('Always') - - -############################################################ -# Compile the pipeline -############################################################ - -pipeline_function = notebook_pipeline -pipeline_filename = path.join(gettempdir(), - pipeline_function.__name__ + '.pipeline.yaml') - -TektonCompiler().compile(pipeline_function, pipeline_filename) - -############################################################ -# Run the pipeline -############################################################ - -client = TektonClient(${pipeline_server}) - -# Get or create an experiment and submit a pipeline run -experiment = client.create_experiment('NOTEBOOK_RUNS') - -# Submit the experiment to run in a pipeline -run_name = '${run_name}' -run_result = client.run_pipeline(experiment.id, run_name, pipeline_filename) diff --git a/api/server/swagger_server/code_templates/run_notebook_with_dataset.TEMPLATE.py b/api/server/swagger_server/code_templates/run_notebook_with_dataset.TEMPLATE.py deleted file mode 100644 index f57650f1..00000000 --- a/api/server/swagger_server/code_templates/run_notebook_with_dataset.TEMPLATE.py +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from kfp import dsl -from kfp_tekton.compiler import TektonCompiler -from kfp_tekton import TektonClient -from os import path -from tempfile import gettempdir - - -############################################################ -# Define the pipeline method -############################################################ - -@dsl.pipeline( - name='${name}', - description='${description}' -) -def notebook_pipeline(): - """A pipeline to run a Jupyter notebook with elyra-ai/kfp-notebook and Papermill.""" - - from elyra.kfp.operator import ExecuteFileOp as NotebookOp - - notebook_op = NotebookOp(name="${name}", - pipeline_name="${name}", - experiment_name="NOTEBOOK_RUNS", - notebook="${notebook}", - cos_endpoint="${cos_endpoint}", - cos_bucket="${cos_bucket}", - cos_directory="${cos_directory}", - cos_dependencies_archive="${cos_dependencies_archive}", - requirements_url="${requirements_url}", - image="${image}") - - from kubernetes.client.models import V1EnvVar - - notebook_op.container.add_env_variable(V1EnvVar(name='AWS_ACCESS_KEY_ID', value="${cos_username}")) - notebook_op.container.add_env_variable(V1EnvVar(name='AWS_SECRET_ACCESS_KEY', value="${cos_password}")) - - from kfp import onprem - - notebook_op.container.add_env_variable(V1EnvVar(name='DATA_DIR', value="${mount_path}")) - notebook_op.apply(onprem.mount_pvc(pvc_name='${dataset_pvc}', - volume_name='${dataset_pvc}', - volume_mount_path='${mount_path}')) - - -############################################################ -# Compile the pipeline -############################################################ - -pipeline_function = notebook_pipeline -pipeline_filename = path.join(gettempdir(), - pipeline_function.__name__ + '.pipeline.yaml') - -TektonCompiler().compile(pipeline_function, pipeline_filename) - -############################################################ -# Run the pipeline -############################################################ - -client = TektonClient(${pipeline_server}) - -# Get or create an experiment and submit a pipeline run -experiment = client.create_experiment('NOTEBOOK_RUNS') - -# Submit the experiment to run in a pipeline -run_name = '${run_name}' -run_result = client.run_pipeline(experiment.id, run_name, pipeline_filename) diff --git a/api/server/swagger_server/code_templates/run_pipeline.TEMPLATE.py b/api/server/swagger_server/code_templates/run_pipeline.TEMPLATE.py deleted file mode 100644 index 6bc67842..00000000 --- a/api/server/swagger_server/code_templates/run_pipeline.TEMPLATE.py +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from kfp import dsl -from kfp_tekton.compiler import TektonCompiler -from kfp_tekton import TektonClient -from os import path -from tempfile import gettempdir - - -############################################################ -# Define the pipeline method -############################################################ - -@dsl.pipeline( - name='${name}', - description='${description}' -) -def custom_pipeline(${pipeline_method_args}): - - ${pipeline_function_body} - - -############################################################ -# Compile the pipeline -############################################################ - -pipeline_func = custom_pipeline -pipeline_file = path.join(gettempdir(), pipeline_func.__name__ + '.pipeline.tar.gz') - -TektonCompiler().compile(pipeline_func, pipeline_file) - -############################################################ -# Run the pipeline -############################################################ - -# TODO: specify pipeline argument values -arguments = ${parameter_dict} - -client = TektonClient(${pipeline_server}) - -# Get or create an experiment and submit a pipeline run -experiment = client.create_experiment('PIPELINE_RUNS') - -# Submit the experiment to run in a pipeline -run_name = '${run_name}' -run_result = client.run_pipeline(experiment.id, run_name, pipeline_file, arguments) diff --git a/api/server/swagger_server/code_templates/serve_kfserving.TEMPLATE.py b/api/server/swagger_server/code_templates/serve_kfserving.TEMPLATE.py deleted file mode 100644 index 94e1589c..00000000 --- a/api/server/swagger_server/code_templates/serve_kfserving.TEMPLATE.py +++ /dev/null @@ -1,76 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from kfp import dsl -from kfp_tekton.compiler import TektonCompiler -from kfp_tekton import TektonClient -from os import path -from tempfile import gettempdir - - -############################################################ -# Define the pipeline method -############################################################ - -@dsl.pipeline( - name='KFServing pipeline', - description='A pipeline for serving models with KFServing' -) -def model_pipeline(model_id='${model_identifier}'): - """A pipeline to serve models with KFServing.""" - - import ai_pipeline_params as params - from kfp import components - from kfp import dsl - - secret_name = 'e2e-creds' - - template_url = 'https://raw.githubusercontent.com/Tomcli/pipelines/35112b844ff3c9cc92a186fcb9abac646271ef02/components/kubeflow/kfserving/component.yaml' - - kfserving_op = components.load_component_from_url(template_url) - - model_config = dsl.ContainerOp( - name='model_config', - image='tomcli/model-config', - command=['python'], - arguments=[ - '-u', 'model-config.py', - '--secret_name', secret_name, - '--model_id', model_id - ], - file_outputs={ - 'default-custom-model-spec': '/tmp/default_custom_model_spec', - 'deployment-name': '/tmp/deployment_name', - 'container-port': '/tmp/container_port' - } - ) - - kfserving = kfserving_op(action='apply', - model_name=model_id, - namespace='mlx', # TODO: use a variable 'namespace' for multi-user deployment - framework='custom', - default_custom_model_spec=model_config.outputs['default-custom-model-spec']).set_image_pull_policy('Always') - -############################################################ -# Compile the pipeline -############################################################ - -pipeline_function = model_pipeline -pipeline_filename = path.join(gettempdir(), - pipeline_function.__name__ + '.tar.gz') - -TektonCompiler().compile(pipeline_function, pipeline_filename) - -############################################################ -# Run the pipeline -############################################################ - -client = TektonClient(${pipeline_server}) - -# Get or create an experiment and submit a pipeline run -experiment = client.create_experiment('MODEL_RUNS') - -# Submit the experiment to run in a pipeline -run_name = '${run_name}' -run_result = client.run_pipeline(experiment.id, run_name, pipeline_filename) diff --git a/api/server/swagger_server/code_templates/serve_knative.TEMPLATE.py b/api/server/swagger_server/code_templates/serve_knative.TEMPLATE.py deleted file mode 100644 index ab863e44..00000000 --- a/api/server/swagger_server/code_templates/serve_knative.TEMPLATE.py +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from kfp import dsl -from kfp_tekton.compiler import TektonCompiler -from kfp_tekton import TektonClient -from os import path -from tempfile import gettempdir - - -############################################################ -# Define the pipeline method -############################################################ - -@dsl.pipeline( - name='Model Deployment pipeline', - description='A pipeline for ML/DL model deployment using Knative.' -) -def model_pipeline(model_id='${model_identifier}'): - """A pipeline for ML/DL model deployment.""" - - from kfp import dsl - from ai_pipeline_params import use_ai_pipeline_params - - secret_name = 'e2e-creds' - - model_config = dsl.ContainerOp( - name='model_config', - image='tomcli/model-config', - command=['python'], - arguments=[ - '-u', 'model-config.py', - '--secret_name', secret_name, - '--model_id', model_id - ], - file_outputs={ - 'model_serving_image': '/tmp/model_serving_image', - 'primary_model_revision': '/tmp/primary_model_revision', - 'deployment_name': '/tmp/deployment_name' - } - ) - - model_deployment = dsl.ContainerOp( - name='knative_model_deployment', - image='aipipeline/knative-model-deploy', - command=['python'], - arguments=[ - '-u', 'knative_deployment.py', - '--model_serving_image', model_config.outputs['model_serving_image'], - '--primary_model_revision', model_config.outputs['primary_model_revision'], - '--deployment_name', model_config.outputs['deployment_name'] - ], - file_outputs={ - 'output': '/tmp/log.txt' - } - ) - - model_deployment.apply(use_ai_pipeline_params(secret_name)) - - -############################################################ -# Compile the pipeline -############################################################ - -pipeline_function = model_pipeline -pipeline_filename = path.join(gettempdir(), - pipeline_function.__name__ + '.tar.gz') - -TektonCompiler().compile(pipeline_function, pipeline_filename) - -############################################################ -# Run the pipeline -############################################################ - -client = TektonClient(${pipeline_server}) - -# Get or create an experiment and submit a pipeline run -experiment = client.create_experiment('MODEL_RUNS') - -# Submit the experiment to run in a pipeline -run_name = '${run_name}' -run_result = client.run_pipeline(experiment.id, run_name, pipeline_filename) diff --git a/api/server/swagger_server/code_templates/serve_kubernetes.TEMPLATE.py b/api/server/swagger_server/code_templates/serve_kubernetes.TEMPLATE.py deleted file mode 100644 index 7f95bd5d..00000000 --- a/api/server/swagger_server/code_templates/serve_kubernetes.TEMPLATE.py +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from kfp import dsl -from kfp_tekton.compiler import TektonCompiler -from kfp_tekton import TektonClient -from os import path -from tempfile import gettempdir - - -############################################################ -# Define the pipeline method -############################################################ - -@dsl.pipeline( - name='Model Deployment pipeline', - description='A pipeline for ML/DL model deployment on Kubernetes.' -) -def model_pipeline(model_id='${model_identifier}'): - """A pipeline for ML/DL model deployment.""" - - from kfp import dsl - from ai_pipeline_params import use_ai_pipeline_params - - secret_name = 'e2e-creds' - - model_config = dsl.ContainerOp( - name='model_config', - image='aipipeline/model-config', - command=['python'], - arguments=[ - '-u', 'model-config.py', - '--secret_name', secret_name, - '--model_id', model_id - ], - file_outputs={ - 'model-serving-image': '/tmp/model_serving_image', - 'deployment-name': '/tmp/deployment_name' - } - ) - - model_deployment = dsl.ContainerOp( - name='k8s_model_deployment', - image='aipipeline/deployment-k8s-remote', - command=['python'], - arguments=[ - '-u', 'kube_deployment.py', - '--model_serving_image', model_config.outputs['model-serving-image'], - '--deployment_name', model_config.outputs['deployment-name'] - ], - file_outputs={ - 'output': '/tmp/log.txt' - } - ) - - model_deployment.apply(use_ai_pipeline_params(secret_name)) - - -############################################################ -# Compile the pipeline -############################################################ - -pipeline_function = model_pipeline -pipeline_filename = path.join(gettempdir(), - pipeline_function.__name__ + '.tar.gz') - -TektonCompiler().compile(pipeline_function, pipeline_filename) - -############################################################ -# Run the pipeline -############################################################ - -client = TektonClient(${pipeline_server}) - -# Get or create an experiment and submit a pipeline run -experiment = client.create_experiment('MODEL_RUNS') - -# Submit the experiment to run in a pipeline -run_name = '${run_name}' -run_result = client.run_pipeline(experiment.id, run_name, pipeline_filename) diff --git a/api/server/swagger_server/code_templates/train_watsonml.TEMPLATE.py b/api/server/swagger_server/code_templates/train_watsonml.TEMPLATE.py deleted file mode 100644 index ceff86d5..00000000 --- a/api/server/swagger_server/code_templates/train_watsonml.TEMPLATE.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from kfp import dsl -from kfp_tekton.compiler import TektonCompiler -from kfp_tekton import TektonClient -from os import path -from tempfile import gettempdir - - -############################################################ -# Define the pipeline method -############################################################ - -@dsl.pipeline( - name='Model Training pipeline', - description='A pipeline for ML/DL model training using Watson Machine Learning.' -) -def model_pipeline(model_id='${model_identifier}'): - """A pipeline for ML/DL model deployment.""" - - from kfp import components, dsl - from ai_pipeline_params import use_ai_pipeline_params - - secret_name = 'wml-creds' - generated_secret = 'test-creds' - - train_op = components.load_component_from_url( - 'https://raw.githubusercontent.com/kubeflow/pipelines/master/components/ibm-components/watson/train/component.yaml') - - model_config = dsl.ContainerOp( - name='model_config', - image='tomcli/model-config:latest', - command=['python'], - arguments=[ - '-u', 'model-config.py', - '--secret_name', generated_secret, - '--model_id', model_id - ], - file_outputs={ - 'train_code': '/tmp/train_code', - 'execution_command': '/tmp/execution_command', - 'framework': '/tmp/framework', - 'framework_version': '/tmp/framework_version', - 'runtime': '/tmp/runtime', - 'runtime_version': '/tmp/runtime_version', - 'run_definition': '/tmp/run_definition', - 'run_name': '/tmp/run_name' - } - ) - - model_config.apply(use_ai_pipeline_params(secret_name)) - - model_training = train_op( - train_code=model_config.outputs['train_code'], - execution_command=model_config.outputs['execution_command'], - framework=model_config.outputs['framework'], - framework_version=model_config.outputs['framework_version'], - runtime=model_config.outputs['runtime'], - runtime_version=model_config.outputs['runtime_version'], - run_definition=model_config.outputs['run_definition'], - run_name=model_config.outputs['run_name'] - ) - - model_training.apply(use_ai_pipeline_params(generated_secret)) - - -############################################################ -# Compile the pipeline -############################################################ - -pipeline_function = model_pipeline -pipeline_filename = path.join(gettempdir(), - pipeline_function.__name__ + '.tar.gz') - -TektonCompiler().compile(pipeline_function, pipeline_filename) - -############################################################ -# Run the pipeline -############################################################ - -client = TektonClient(${pipeline_server}) - -# Get or create an experiment and submit a pipeline run -experiment = client.create_experiment('MODEL_RUNS') - -# Submit the experiment to run in a pipeline -run_name = '${run_name}' -run_result = client.run_pipeline(experiment.id, run_name, pipeline_filename) diff --git a/api/server/swagger_server/code_templates/train_watsonml_w_credentials.TEMPLATE.py b/api/server/swagger_server/code_templates/train_watsonml_w_credentials.TEMPLATE.py deleted file mode 100644 index d1df85a8..00000000 --- a/api/server/swagger_server/code_templates/train_watsonml_w_credentials.TEMPLATE.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from kfp import dsl -from kfp_tekton.compiler import TektonCompiler -from kfp_tekton import TektonClient -from os import path -from tempfile import gettempdir - - -############################################################ -# Define the pipeline method -############################################################ - -@dsl.pipeline( - name='Model Training pipeline', - description='A pipeline for ML/DL model training using Watson Machine Learning.' -) -def model_pipeline(model_id='${model_identifier}', - github_token='${github_token}', - github_url='${github_url}'): - """A pipeline for ML/DL model deployment.""" - - from kfp import components, dsl - from ai_pipeline_params import use_ai_pipeline_params - - generated_secret = '${generated_secret}' - - train_op = components.load_component_from_url( - 'https://raw.githubusercontent.com/kubeflow/pipelines/master/components/ibm-components/watson/train/component.yaml') - - model_config = dsl.ContainerOp( - name='model_config', - image='aipipeline/model-config:latest', - command=['python'], - arguments=[ - '-u', 'model-config.py', - '--secret_name', generated_secret, - '--model_id', model_id, - '--github_token', github_token, - '--github_url', github_url - ], - file_outputs={ - 'train_code': '/tmp/train_code', - 'execution_command': '/tmp/execution_command', - 'framework': '/tmp/framework', - 'framework_version': '/tmp/framework_version', - 'runtime': '/tmp/runtime', - 'runtime_version': '/tmp/runtime_version', - 'run_definition': '/tmp/run_definition', - 'run_name': '/tmp/run_name' - } - ) - - model_training = train_op( - train_code=model_config.outputs['train_code'], - execution_command=model_config.outputs['execution_command'], - framework=model_config.outputs['framework'], - framework_version=model_config.outputs['framework_version'], - runtime=model_config.outputs['runtime'], - runtime_version=model_config.outputs['runtime_version'], - run_definition=model_config.outputs['run_definition'], - run_name=model_config.outputs['run_name'] - ) - - model_training.apply(use_ai_pipeline_params(generated_secret)) - - -############################################################ -# Compile the pipeline -############################################################ - -pipeline_function = model_pipeline -pipeline_filename = path.join(gettempdir(), - pipeline_function.__name__ + '.tar.gz') - -TektonCompiler().compile(pipeline_function, pipeline_filename) - -############################################################ -# Run the pipeline -############################################################ - -client = TektonClient(${pipeline_server}) - -# Get or create an experiment and submit a pipeline run -experiment = client.create_experiment('MODEL_RUNS') - -# Submit the experiment to run in a pipeline -run_name = '${run_name}' -run_result = client.run_pipeline(experiment.id, run_name, pipeline_filename) diff --git a/api/server/swagger_server/controllers/__init__.py b/api/server/swagger_server/controllers/__init__.py deleted file mode 100644 index 088cda17..00000000 --- a/api/server/swagger_server/controllers/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 diff --git a/api/server/swagger_server/controllers/application_settings_controller.py b/api/server/swagger_server/controllers/application_settings_controller.py deleted file mode 100644 index d9714559..00000000 --- a/api/server/swagger_server/controllers/application_settings_controller.py +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import six - -from swagger_server.models.api_settings import ApiSettings # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.models.dictionary import Dictionary # noqa: E501 -from swagger_server import util - - -def get_application_settings(): # noqa: E501 - """get_application_settings - - Returns the application settings. # noqa: E501 - - - :rtype: ApiSettings - """ - return util.invoke_controller_impl() - - -def modify_application_settings(dictionary): # noqa: E501 - """modify_application_settings - - Modify one or more of the application settings. # noqa: E501 - - :param dictionary: A dictionary where the name of the keys corresponds to the name of the settings. - :type dictionary: dict | bytes - - :rtype: ApiSettings - """ - if connexion.request.is_json: - dictionary = Dictionary.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def set_application_settings(settings): # noqa: E501 - """set_application_settings - - Set and store the application settings. # noqa: E501 - - :param settings: - :type settings: dict | bytes - - :rtype: ApiSettings - """ - if connexion.request.is_json: - settings = ApiSettings.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() diff --git a/api/server/swagger_server/controllers/catalog_service_controller.py b/api/server/swagger_server/controllers/catalog_service_controller.py deleted file mode 100644 index dd7c98e3..00000000 --- a/api/server/swagger_server/controllers/catalog_service_controller.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from swagger_server.models.api_catalog_upload import ApiCatalogUpload # noqa: E501 -from swagger_server.models.api_catalog_upload_response import ApiCatalogUploadResponse # noqa: E501 -from swagger_server.models.api_list_catalog_items_response import ApiListCatalogItemsResponse # noqa: E501 -from swagger_server import util - - -def list_all_assets(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_all_assets - - # noqa: E501 - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. - :type filter: str - - :rtype: ApiListCatalogItemsResponse - """ - return util.invoke_controller_impl() - - -def upload_catalog_from_url(url, access_token=None): # noqa: E501 - """upload_catalog_from_url - - # noqa: E501 - - :param url: URL pointing to the catalog YAML file. - :type url: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiCatalogUploadResponse - """ - return util.invoke_controller_impl() - - -def upload_multiple_assets(body): # noqa: E501 - """upload_multiple_assets - - # noqa: E501 - - :param body: - :type body: ApiCatalogUpload - - :rtype: ApiCatalogUploadResponse - """ - return util.invoke_controller_impl() diff --git a/api/server/swagger_server/controllers/component_service_controller.py b/api/server/swagger_server/controllers/component_service_controller.py deleted file mode 100644 index e0a72271..00000000 --- a/api/server/swagger_server/controllers/component_service_controller.py +++ /dev/null @@ -1,208 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import six - -from swagger_server.models.api_component import ApiComponent # noqa: E501 -from swagger_server.models.api_generate_code_response import ApiGenerateCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_components_response import ApiListComponentsResponse # noqa: E501 -from swagger_server.models.api_parameter import ApiParameter # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server import util - - -def approve_components_for_publishing(component_ids): # noqa: E501 - """approve_components_for_publishing - - # noqa: E501 - - :param component_ids: Array of component IDs to be approved for publishing. - :type component_ids: List[] - - :rtype: None - """ - return util.invoke_controller_impl() - - -def create_component(body): # noqa: E501 - """create_component - - # noqa: E501 - - :param body: - :type body: dict | bytes - - :rtype: ApiComponent - """ - if connexion.request.is_json: - body = ApiComponent.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def delete_component(id): # noqa: E501 - """delete_component - - # noqa: E501 - - :param id: - :type id: str - - :rtype: None - """ - return util.invoke_controller_impl() - - -def download_component_files(id, include_generated_code=None): # noqa: E501 - """Returns the component artifacts compressed into a .tgz (.tar.gz) file. - - # noqa: E501 - - :param id: - :type id: str - :param include_generated_code: Include generated run script in download - :type include_generated_code: bool - - :rtype: file | binary - """ - return util.invoke_controller_impl() - - -def generate_component_code(id): # noqa: E501 - """generate_component_code - - Generate sample code to use component in a pipeline # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiGenerateCodeResponse - """ - return util.invoke_controller_impl() - - -def get_component(id): # noqa: E501 - """get_component - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiComponent - """ - return util.invoke_controller_impl() - - -def get_component_template(id): # noqa: E501 - """get_component_template - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiGetTemplateResponse - """ - return util.invoke_controller_impl() - - -def list_components(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_components - - # noqa: E501 - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. - :type filter: str - - :rtype: ApiListComponentsResponse - """ - return util.invoke_controller_impl() - - -def run_component(id, parameters, run_name=None): # noqa: E501 - """run_component - - # noqa: E501 - - :param id: - :type id: str - :param parameters: - :type parameters: List[ApiParameter] - :param run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to component name - :type run_name: str - - :rtype: ApiRunCodeResponse - """ - if connexion.request.is_json: - parameters = [ApiParameter.from_dict(d) for d in connexion.request.get_json()] # noqa: E501 - return util.invoke_controller_impl() - - -def set_featured_components(component_ids): # noqa: E501 - """set_featured_components - - # noqa: E501 - - :param component_ids: Array of component IDs to be featured. - :type component_ids: List[] - - :rtype: None - """ - return util.invoke_controller_impl() - - -def upload_component(uploadfile, name=None): # noqa: E501 - """upload_component - - # noqa: E501 - - :param uploadfile: The component YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: - :type name: str - - :rtype: ApiComponent - """ - return util.invoke_controller_impl() - - -def upload_component_file(id, uploadfile): # noqa: E501 - """upload_component_file - - # noqa: E501 - - :param id: The id of the component. - :type id: str - :param uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - :type uploadfile: werkzeug.datastructures.FileStorage - - :rtype: ApiComponent - """ - return util.invoke_controller_impl() - - -def upload_component_from_url(url, name=None, access_token=None): # noqa: E501 - """upload_component_from_url - - # noqa: E501 - - :param url: URL pointing to the component YAML file. - :type url: str - :param name: Optional, the name of the component to be created overriding the name in the YAML file. - :type name: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiComponent - """ - return util.invoke_controller_impl() diff --git a/api/server/swagger_server/controllers/credential_service_controller.py b/api/server/swagger_server/controllers/credential_service_controller.py deleted file mode 100644 index 5d63436e..00000000 --- a/api/server/swagger_server/controllers/credential_service_controller.py +++ /dev/null @@ -1,71 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import six - -from swagger_server.models.api_credential import ApiCredential # noqa: E501 -from swagger_server.models.api_list_credentials_response import ApiListCredentialsResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server import util - - -def create_credential(body): # noqa: E501 - """create_credential - - Creates a credential associated with a pipeline. # noqa: E501 - - :param body: - :type body: dict | bytes - - :rtype: ApiCredential - """ - if connexion.request.is_json: - body = ApiCredential.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def delete_credential(id): # noqa: E501 - """delete_credential - - # noqa: E501 - - :param id: - :type id: str - - :rtype: None - """ - return util.invoke_controller_impl() - - -def get_credential(id): # noqa: E501 - """get_credential - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiCredential - """ - return util.invoke_controller_impl() - - -def list_credentials(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_credentials - - # noqa: E501 - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Credential's attribute names and their respective values to be filtered for. - :type filter: str - - :rtype: ApiListCredentialsResponse - """ - return util.invoke_controller_impl() diff --git a/api/server/swagger_server/controllers/dataset_service_controller.py b/api/server/swagger_server/controllers/dataset_service_controller.py deleted file mode 100644 index 51ba959b..00000000 --- a/api/server/swagger_server/controllers/dataset_service_controller.py +++ /dev/null @@ -1,208 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import six - -from swagger_server.models.api_dataset import ApiDataset # noqa: E501 -from swagger_server.models.api_generate_code_response import ApiGenerateCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_datasets_response import ApiListDatasetsResponse # noqa: E501 -from swagger_server.models.api_parameter import ApiParameter # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server import util - - -def approve_datasets_for_publishing(dataset_ids): # noqa: E501 - """approve_datasets_for_publishing - - # noqa: E501 - - :param dataset_ids: Array of dataset IDs to be approved for publishing. - :type dataset_ids: List[str] - - :rtype: None - """ - return util.invoke_controller_impl() - - -def create_dataset(body): # noqa: E501 - """create_dataset - - # noqa: E501 - - :param body: - :type body: dict | bytes - - :rtype: ApiDataset - """ - if connexion.request.is_json: - body = ApiDataset.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def delete_dataset(id): # noqa: E501 - """delete_dataset - - # noqa: E501 - - :param id: - :type id: str - - :rtype: None - """ - return util.invoke_controller_impl() - - -def download_dataset_files(id, include_generated_code=None): # noqa: E501 - """Returns the dataset artifacts compressed into a .tgz (.tar.gz) file. - - # noqa: E501 - - :param id: - :type id: str - :param include_generated_code: Include generated run script in download - :type include_generated_code: bool - - :rtype: file | binary - """ - return util.invoke_controller_impl() - - -def generate_dataset_code(id): # noqa: E501 - """generate_dataset_code - - Generate sample code to use dataset in a pipeline # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiGenerateCodeResponse - """ - return util.invoke_controller_impl() - - -def get_dataset(id): # noqa: E501 - """get_dataset - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiDataset - """ - return util.invoke_controller_impl() - - -def get_dataset_template(id): # noqa: E501 - """get_dataset_template - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiGetTemplateResponse - """ - return util.invoke_controller_impl() - - -def list_datasets(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_datasets - - # noqa: E501 - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of 'field_name', 'field_name asc' or 'field_name desc'. Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. - :type filter: str - - :rtype: ApiListDatasetsResponse - """ - return util.invoke_controller_impl() - - -def run_dataset(id, parameters=None, run_name=None): # noqa: E501 - """run_dataset - - # noqa: E501 - - :param id: - :type id: str - :param parameters: - :type parameters: list | bytes - :param run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to component name - :type run_name: str - - :rtype: ApiRunCodeResponse - """ - if connexion.request.is_json: - parameters = [ApiParameter.from_dict(d) for d in connexion.request.get_json()] # noqa: E501 - return util.invoke_controller_impl() - - -def set_featured_datasets(dataset_ids): # noqa: E501 - """set_featured_datasets - - # noqa: E501 - - :param dataset_ids: Array of dataset IDs to be featured. - :type dataset_ids: List[str] - - :rtype: None - """ - return util.invoke_controller_impl() - - -def upload_dataset(uploadfile, name=None): # noqa: E501 - """upload_dataset - - # noqa: E501 - - :param uploadfile: The dataset YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: - :type name: str - - :rtype: ApiDataset - """ - return util.invoke_controller_impl() - - -def upload_dataset_file(id, uploadfile): # noqa: E501 - """upload_dataset_file - - # noqa: E501 - - :param id: The id of the dataset. - :type id: str - :param uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - :type uploadfile: werkzeug.datastructures.FileStorage - - :rtype: ApiDataset - """ - return util.invoke_controller_impl() - - -def upload_dataset_from_url(url, name=None, access_token=None): # noqa: E501 - """upload_dataset_from_url - - # noqa: E501 - - :param url: URL pointing to the dataset YAML file. - :type url: str - :param name: Optional, the name of the dataset to be created overriding the name in the YAML file. - :type name: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiDataset - """ - return util.invoke_controller_impl() diff --git a/api/server/swagger_server/controllers/health_check_controller.py b/api/server/swagger_server/controllers/health_check_controller.py deleted file mode 100644 index b808860e..00000000 --- a/api/server/swagger_server/controllers/health_check_controller.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import six - -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server import util - - -def health_check(check_database=None, check_object_store=None): # noqa: E501 - """Checks if the server is running - - # noqa: E501 - - :param check_database: Test connection to MySQL database - :type check_database: bool - :param check_object_store: Test connection to Minio object store - :type check_object_store: bool - - :rtype: None - """ - return util.invoke_controller_impl() diff --git a/api/server/swagger_server/controllers/inference_service_controller.py b/api/server/swagger_server/controllers/inference_service_controller.py deleted file mode 100644 index e3a145a2..00000000 --- a/api/server/swagger_server/controllers/inference_service_controller.py +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import six - -from swagger_server.models.api_inferenceservice import ApiInferenceservice # noqa: E501 -from swagger_server.models.api_list_inferenceservices_response import ApiListInferenceservicesResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server import util - - -def create_service(body, namespace=None): # noqa: E501 - """create_service - - # noqa: E501 - - :param body: - :type body: dict | bytes - :param namespace: - :type namespace: str - - :rtype: ApiInferenceservice - """ - if connexion.request.is_json: - body = ApiInferenceservice.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def get_inferenceservices(id, namespace=None): # noqa: E501 - """get_inferenceservices - - # noqa: E501 - - :param id: - :type id: str - :param namespace: - :type namespace: str - - :rtype: ApiInferenceservice - """ - return util.invoke_controller_impl() - - -def list_inferenceservices(page_token=None, page_size=None, sort_by=None, filter=None, namespace=None): # noqa: E501 - """list_inferenceservices - - # noqa: E501 - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary with key-value pairs that correspond to the InferenceService's attribute names and their respective values to be filtered for. - :type filter: str - :param namespace: - :type namespace: str - - :rtype: ApiListInferenceservicesResponse - """ - return util.invoke_controller_impl() - - -def upload_service(uploadfile, name=None, namespace=None): # noqa: E501 - """upload_service - - # noqa: E501 - - :param uploadfile: The inference service metadata to upload. Maximum size of 32MB is supported. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: - :type name: str - :param namespace: - :type namespace: str - - :rtype: ApiInferenceservice - """ - return util.invoke_controller_impl() diff --git a/api/server/swagger_server/controllers/model_service_controller.py b/api/server/swagger_server/controllers/model_service_controller.py deleted file mode 100644 index 2facf4f8..00000000 --- a/api/server/swagger_server/controllers/model_service_controller.py +++ /dev/null @@ -1,212 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import six - -from swagger_server.models.api_generate_model_code_response import ApiGenerateModelCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_models_response import ApiListModelsResponse # noqa: E501 -from swagger_server.models.api_model import ApiModel # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.models.dictionary import Dictionary # noqa: E501 -from swagger_server import util - - -def approve_models_for_publishing(model_ids): # noqa: E501 - """approve_models_for_publishing - - # noqa: E501 - - :param model_ids: Array of model IDs to be approved for publishing. - :type model_ids: List[] - - :rtype: None - """ - return util.invoke_controller_impl() - - -def create_model(body): # noqa: E501 - """create_model - - # noqa: E501 - - :param body: - :type body: dict | bytes - - :rtype: ApiModel - """ - if connexion.request.is_json: - body = ApiModel.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def delete_model(id): # noqa: E501 - """delete_model - - # noqa: E501 - - :param id: - :type id: str - - :rtype: None - """ - return util.invoke_controller_impl() - - -def download_model_files(id, include_generated_code=None): # noqa: E501 - """Returns the model artifacts compressed into a .tgz (.tar.gz) file. - - # noqa: E501 - - :param id: - :type id: str - :param include_generated_code: Include generated run scripts in download - :type include_generated_code: bool - - :rtype: file | binary - """ - return util.invoke_controller_impl() - - -def generate_model_code(id): # noqa: E501 - """generate_model_code - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiGenerateModelCodeResponse - """ - return util.invoke_controller_impl() - - -def get_model(id): # noqa: E501 - """get_model - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiModel - """ - return util.invoke_controller_impl() - - -def get_model_template(id): # noqa: E501 - """get_model_template - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiGetTemplateResponse - """ - return util.invoke_controller_impl() - - -def list_models(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_models - - # noqa: E501 - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Model's attribute names and their respective values to be filtered for. - :type filter: str - - :rtype: ApiListModelsResponse - """ - return util.invoke_controller_impl() - - -def run_model(id, pipeline_stage, execution_platform, run_name=None, parameters=None): # noqa: E501 - """run_model - - # noqa: E501 - - :param id: - :type id: str - :param pipeline_stage: pipeline stage, either 'train' or 'serve' - :type pipeline_stage: str - :param execution_platform: execution platform, i.e. 'kubernetes', 'knative' - :type execution_platform: str - :param run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to model identifier - :type run_name: str - :param parameters: optional run parameters, must include 'github_token' and 'github_url' if credentials are required - :type parameters: dict - - :rtype: ApiRunCodeResponse - """ - if connexion.request.is_json: - parameters = Dictionary.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def set_featured_models(model_ids): # noqa: E501 - """set_featured_models - - # noqa: E501 - - :param model_ids: Array of model IDs to be featured. - :type model_ids: List[] - - :rtype: None - """ - return util.invoke_controller_impl() - - -def upload_model(uploadfile, name=None): # noqa: E501 - """upload_model - - # noqa: E501 - - :param uploadfile: The model YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: - :type name: str - - :rtype: ApiModel - """ - return util.invoke_controller_impl() - - -def upload_model_file(id, uploadfile): # noqa: E501 - """upload_model_file - - # noqa: E501 - - :param id: The model identifier. - :type id: str - :param uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - :type uploadfile: werkzeug.datastructures.FileStorage - - :rtype: ApiModel - """ - return util.invoke_controller_impl() - - -def upload_model_from_url(url, name=None, access_token=None): # noqa: E501 - """upload_model_from_url - - # noqa: E501 - - :param url: URL pointing to the model YAML file. - :type url: str - :param name: Optional, the name of the model to be created overriding the name in the YAML file. - :type name: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiModel - """ - return util.invoke_controller_impl() diff --git a/api/server/swagger_server/controllers/notebook_service_controller.py b/api/server/swagger_server/controllers/notebook_service_controller.py deleted file mode 100644 index 55bebaef..00000000 --- a/api/server/swagger_server/controllers/notebook_service_controller.py +++ /dev/null @@ -1,210 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import six - -from swagger_server.models.api_generate_code_response import ApiGenerateCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_notebooks_response import ApiListNotebooksResponse # noqa: E501 -from swagger_server.models.api_notebook import ApiNotebook # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.models.dictionary import Dictionary # noqa: E501 -from swagger_server import util - - -def approve_notebooks_for_publishing(notebook_ids): # noqa: E501 - """approve_notebooks_for_publishing - - # noqa: E501 - - :param notebook_ids: Array of notebook IDs to be approved for publishing. - :type notebook_ids: List[] - - :rtype: None - """ - return util.invoke_controller_impl() - - -def create_notebook(body): # noqa: E501 - """create_notebook - - # noqa: E501 - - :param body: - :type body: dict | bytes - - :rtype: ApiNotebook - """ - if connexion.request.is_json: - body = ApiNotebook.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def delete_notebook(id): # noqa: E501 - """delete_notebook - - # noqa: E501 - - :param id: - :type id: str - - :rtype: None - """ - return util.invoke_controller_impl() - - -def download_notebook_files(id, include_generated_code=None): # noqa: E501 - """Returns the notebook artifacts compressed into a .tgz (.tar.gz) file. - - # noqa: E501 - - :param id: - :type id: str - :param include_generated_code: Include generated run script in download - :type include_generated_code: bool - - :rtype: file - """ - return util.invoke_controller_impl() - - -def generate_notebook_code(id): # noqa: E501 - """generate_notebook_code - - Generate sample code to use notebook in a pipeline # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiGenerateCodeResponse - """ - return util.invoke_controller_impl() - - -def get_notebook(id): # noqa: E501 - """get_notebook - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiNotebook - """ - return util.invoke_controller_impl() - - -def get_notebook_template(id): # noqa: E501 - """get_notebook_template - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiGetTemplateResponse - """ - return util.invoke_controller_impl() - - -def list_notebooks(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_notebooks - - # noqa: E501 - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Notebook's attribute names and their respective values to be filtered for. - :type filter: str - - :rtype: ApiListNotebooksResponse - """ - return util.invoke_controller_impl() - - -def run_notebook(id, run_name=None, parameters=None): # noqa: E501 - """run_notebook - - # noqa: E501 - - :param id: - :type id: str - :param run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to notebook name - :type run_name: str - :param parameters: optional run parameters, may be required based on pipeline definition - :type parameters: dict | bytes - - :rtype: ApiRunCodeResponse - """ - if connexion.request.is_json: - parameters = Dictionary.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def set_featured_notebooks(notebook_ids): # noqa: E501 - """set_featured_notebooks - - # noqa: E501 - - :param notebook_ids: Array of notebook IDs to be featured. - :type notebook_ids: List[] - - :rtype: None - """ - return util.invoke_controller_impl() - - -def upload_notebook(uploadfile, name=None, enterprise_github_token=None): # noqa: E501 - """upload_notebook - - # noqa: E501 - - :param uploadfile: The notebook metadata YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: - :type name: str - :param enterprise_github_token: Optional GitHub API token providing read-access to notebooks stored on Enterprise GitHub accounts. - :type enterprise_github_token: str - - :rtype: ApiNotebook - """ - return util.invoke_controller_impl() - - -def upload_notebook_file(id, uploadfile): # noqa: E501 - """upload_notebook_file - - # noqa: E501 - - :param id: The id of the notebook. - :type id: str - :param uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - :type uploadfile: werkzeug.datastructures.FileStorage - - :rtype: ApiNotebook - """ - return util.invoke_controller_impl() - - -def upload_notebook_from_url(url, name=None, access_token=None): # noqa: E501 - """upload_notebook_from_url - - # noqa: E501 - - :param url: URL pointing to the notebook YAML file. - :type url: str - :param name: Optional, the name of the notebook to be created overriding the name in the YAML file. - :type name: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiNotebook - """ - return util.invoke_controller_impl() diff --git a/api/server/swagger_server/controllers/pipeline_service_controller.py b/api/server/swagger_server/controllers/pipeline_service_controller.py deleted file mode 100644 index 0632ad72..00000000 --- a/api/server/swagger_server/controllers/pipeline_service_controller.py +++ /dev/null @@ -1,200 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import six - -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_pipelines_response import ApiListPipelinesResponse # noqa: E501 -from swagger_server.models.api_pipeline import ApiPipeline # noqa: E501 -from swagger_server.models.api_pipeline_custom_run_payload import ApiPipelineCustomRunPayload # noqa: E501 -from swagger_server.models.api_pipeline_extended import ApiPipelineExtended # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.models.dictionary import Dictionary # noqa: E501 -from swagger_server import util - - -def approve_pipelines_for_publishing(pipeline_ids): # noqa: E501 - """approve_pipelines_for_publishing - - # noqa: E501 - - :param pipeline_ids: Array of pipeline IDs to be approved for publishing. - :type pipeline_ids: List[] - - :rtype: None - """ - return util.invoke_controller_impl() - - -def create_pipeline(body): # noqa: E501 - """create_pipeline - - # noqa: E501 - - :param body: - :type body: dict | bytes - - :rtype: ApiPipeline - """ - if connexion.request.is_json: - body = ApiPipeline.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def delete_pipeline(id): # noqa: E501 - """delete_pipeline - - # noqa: E501 - - :param id: - :type id: str - - :rtype: None - """ - return util.invoke_controller_impl() - - -def download_pipeline_files(id): # noqa: E501 - """Returns the pipeline YAML compressed into a .tgz (.tar.gz) file. - - # noqa: E501 - - :param id: - :type id: str - - :rtype: file | binary - """ - return util.invoke_controller_impl() - - -def get_pipeline(id): # noqa: E501 - """get_pipeline - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiPipelineExtended - """ - return util.invoke_controller_impl() - - -def get_template(id): # noqa: E501 - """get_template - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiGetTemplateResponse - """ - return util.invoke_controller_impl() - - -def list_pipelines(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_pipelines - - # noqa: E501 - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary with key-value pairs that correspond to the Pipeline's attribute names and their respective values to be filtered for. - :type filter: str - - :rtype: ApiListPipelinesResponse - """ - return util.invoke_controller_impl() - - -def run_custom_pipeline(run_custom_pipeline_payload, run_name=None): # noqa: E501 - """run_custom_pipeline - - Run a complex pipeline defined by a directed acyclic graph (DAG) # noqa: E501 - - :param run_custom_pipeline_payload: A custom pipeline defined by a directed acyclic graph (DAG) and input parameters - :type run_custom_pipeline_payload: dict | bytes - :param run_name: Name to identify the run on the Kubeflow Pipelines UI - :type run_name: str - - :rtype: ApiRunCodeResponse - """ - if connexion.request.is_json: - run_custom_pipeline_payload = ApiPipelineCustomRunPayload.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def run_pipeline(id, run_name=None, parameters=None): # noqa: E501 - """run_pipeline - - # noqa: E501 - - :param id: - :type id: str - :param run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to pipeline name - :type run_name: str - :param parameters: optional run parameters, may be required based on pipeline definition - :type parameters: dict | bytes - - :rtype: ApiRunCodeResponse - """ - if connexion.request.is_json: - parameters = Dictionary.from_dict(connexion.request.get_json()) # noqa: E501 - return util.invoke_controller_impl() - - -def set_featured_pipelines(pipeline_ids): # noqa: E501 - """set_featured_pipelines - - # noqa: E501 - - :param pipeline_ids: Array of pipeline IDs to be featured. - :type pipeline_ids: List[] - - :rtype: None - """ - return util.invoke_controller_impl() - - -def upload_pipeline(uploadfile, name=None, description=None, annotations=None): # noqa: E501 - """upload_pipeline - - # noqa: E501 - - :param uploadfile: The pipeline YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: A name for this pipeline, optional - :type name: str - :param description: A description for this pipeline, optional - :type description: str - :param annotations: A string representation of a JSON dictionary of annotations describing this pipeline, optional. Example: {\"platform\": \"Kubeflow\", \"license\": \"Opensource\"} - :type annotations: str - - :rtype: ApiPipelineExtended - """ - return util.invoke_controller_impl() - - -def upload_pipeline_from_url(url, name=None, access_token=None): # noqa: E501 - """upload_pipeline_from_url - - # noqa: E501 - - :param url: URL pointing to the pipeline YAML file. - :type url: str - :param name: Optional, the name of the pipeline to be created overriding the name in the YAML file. - :type name: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiPipeline - """ - return util.invoke_controller_impl() diff --git a/api/server/swagger_server/controllers_impl/__init__.py b/api/server/swagger_server/controllers_impl/__init__.py deleted file mode 100644 index 779c09c5..00000000 --- a/api/server/swagger_server/controllers_impl/__init__.py +++ /dev/null @@ -1,87 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import requests - -from werkzeug.datastructures import FileStorage - -from kfp_tekton.compiler._k8s_helper import sanitize_k8s_name; -from swagger_server.data_access.minio_client import extract_yaml_from_tarfile -from swagger_server.models.api_parameter import ApiParameter -from swagger_server.util import ApiError - - -############################################################################### -# private helper methods, not swagger-generated -# TODO: move into controllers_impl/util.py -############################################################################### - -def get_yaml_file_content_from_uploadfile(uploadfile: FileStorage): - - file_name = uploadfile.filename - file_ext = file_name.lower().split(".")[-1] - - if file_ext in ["tgz", "gz"]: - yaml_file_content = extract_yaml_from_tarfile(uploadfile) - - elif file_ext in ["yaml", "yml"]: - yaml_file_content = uploadfile.stream.read() - - else: - raise ApiError( - f"File extension not supported: '{file_ext}', uploadfile: '{file_name}'." - f"Supported file extensions: .tar.gz, .gz, .yaml, .yml", 501) - - return yaml_file_content - - -def validate_parameters(api_parameters: [ApiParameter], parameters: dict) -> (str, int): - - acceptable_parameters = [p.name for p in api_parameters] - unexpected_parameters = set(parameters.keys()) - set(acceptable_parameters) - - if unexpected_parameters: - return f"Unexpected parameter(s): {list(unexpected_parameters)}. " \ - f"Acceptable parameter(s): {acceptable_parameters}", 422 - - missing_parameters = [p.name for p in api_parameters - if not p.default and p.name not in parameters] - - if missing_parameters: - return f"Missing required parameter(s): {missing_parameters}", 422 - - return None, 200 - - -def validate_id(id: str) -> (str, int): - - if id != sanitize_k8s_name(id): - return f"Identifiers must contain lower case alphanumeric characters or '-' only.", 422 - - return None, 200 - - -def download_file_content_from_url(url: str, bearer_token: str = None) -> bytes: - - request_headers = dict() - - if bearer_token and "?token=" not in url: - request_headers.update({"Authorization": f"Bearer {bearer_token}"}) - - try: - raw_url = url.replace("/blob/", "/") \ - .replace("/github.ibm.com/", "/raw.github.ibm.com/") \ - .replace("/github.com/", "/raw.githubusercontent.com/") - - response = requests.get(raw_url, allow_redirects=True, headers=request_headers) - - if response.ok: - file_content = response.content - return file_content - - except Exception as e: - raise ApiError(f"Could not download file '{url}'. \n{str(e)}", 422) - - raise ApiError(f"Could not download file '{url}'. Reason: {response.reason}", - response.status_code) diff --git a/api/server/swagger_server/controllers_impl/application_settings_controller_impl.py b/api/server/swagger_server/controllers_impl/application_settings_controller_impl.py deleted file mode 100644 index 1cf43e39..00000000 --- a/api/server/swagger_server/controllers_impl/application_settings_controller_impl.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -import connexion -import yaml - -from os.path import abspath, join, dirname -from swagger_server.models.api_parameter import ApiParameter # noqa: E501 -from swagger_server.models.api_settings import ApiSettings # noqa: E501 -from swagger_server.models.api_settings_section import ApiSettingsSection # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server import util - - -SETTINGS_FILE = abspath(join(dirname(__file__), "..", "..", "application_settings.yaml")) - - -def get_application_settings(): # noqa: E501 - """get_application_settings - - Returns the application settings. - - :rtype: ApiSettings - """ - with open(SETTINGS_FILE, "r") as f: - yaml_dict = yaml.load(f, Loader=yaml.FullLoader) - - settings = ApiSettings.from_dict(yaml_dict) - - return settings, 200 - - -def modify_application_settings(dictionary: dict): # noqa: E501 - """modify_application_settings - - Modify one or more of the application settings. - - :param dictionary: A dictionary where the name of the keys corresponds to the name of the settings. - :type dictionary: - - :rtype: ApiSettings - """ - with open(SETTINGS_FILE, "r") as f: - yaml_dict = yaml.load(f, Loader=yaml.FullLoader) - - settings = ApiSettings.from_dict(yaml_dict) - - for section in settings.sections: - for setting in section.settings: - if setting.name in dictionary.keys(): - setting.value = dictionary.get(setting.name) - - with open(SETTINGS_FILE, 'w') as f: - yaml.dump(settings.to_dict(), f, default_flow_style=False) - - return settings, 200 - - -def set_application_settings(settings): # noqa: E501 - """set_application_settings - - Set and store the application settings. - - :param settings: - :type settings: dict - - :rtype: ApiSettings - """ - if connexion.request.is_json: - settings = ApiSettings.from_dict(connexion.request.get_json()) - - with open(SETTINGS_FILE, 'w') as f: - yaml.dump(settings.to_dict(), f, default_flow_style=False) - - return settings, 200 diff --git a/api/server/swagger_server/controllers_impl/catalog_service_controller_impl.py b/api/server/swagger_server/controllers_impl/catalog_service_controller_impl.py deleted file mode 100644 index 5cfe7ad2..00000000 --- a/api/server/swagger_server/controllers_impl/catalog_service_controller_impl.py +++ /dev/null @@ -1,188 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import json -import traceback - -from swagger_server.data_access.mysql_client import update_multiple - -from swagger_server.models import ApiCatalogUpload, ApiCatalogUploadError -from swagger_server.models import ApiCatalogUploadResponse, ApiListCatalogItemsResponse -from swagger_server.models import ApiComponent, ApiDataset, ApiModel, ApiNotebook, ApiPipelineExtension - -from swagger_server.controllers_impl import download_file_content_from_url - -from swagger_server.controllers_impl.component_service_controller_impl import list_components, upload_component_from_url -from swagger_server.controllers_impl.dataset_service_controller_impl import list_datasets, upload_dataset_from_url -from swagger_server.controllers_impl.model_service_controller_impl import list_models, upload_model_from_url -from swagger_server.controllers_impl.notebook_service_controller_impl import list_notebooks, upload_notebook_from_url -from swagger_server.controllers_impl.pipeline_service_controller_impl import list_pipelines, upload_pipeline_from_url - -from swagger_server.util import ApiError - - -def list_all_assets(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_all_assets - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for. - :type filter: str - - :rtype: ApiListCatalogItemsResponse - """ - - if page_size == 0: - return {}, 204 - - # TODO: do not mis-use page_token as MySQL result offset - offset = int(page_token) if page_token and page_token.isdigit() else 0 - - if page_size or page_token: - print(f"WARNING: page_size and page_token are not implemented on {__file__}#list_all_assets()") - - list_methods = { - "components": list_components, - "datasets": list_datasets, - "models": list_models, - "notebooks": list_notebooks, - "pipelines": list_pipelines - } - - api_response = ApiListCatalogItemsResponse( - components=[], datasets=[], models=[], notebooks=[], pipelines=[], - total_size=0) - - for asset_type, list_method in list_methods.items(): - - asset_list_response, status = list_method(filter=filter, sort_by=sort_by) - - if 200 <= status < 300: - asset_list = asset_list_response.__getattribute__(asset_type) - api_response.__getattribute__(asset_type).extend(asset_list) - - # TODO: return filtered size or total number of all assets - # api_response.total_size += asset_list_response.total_size - api_response.total_size += len(asset_list) - - return api_response, 200 - - -def upload_catalog_from_url(url, access_token=None): # noqa: E501 - """upload_catalog_from_url - - # noqa: E501 - - :param url: URL pointing to the catalog YAML file. - :type url: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiCatalogUploadResponse - """ - - json_file_content = download_file_content_from_url(url, access_token) - catalog_dict = json.loads(json_file_content) - catalog = ApiCatalogUpload.from_dict(catalog_dict) - return _upload_multiple_assets(catalog) - - -def upload_multiple_assets(body: ApiCatalogUpload): # noqa: E501 - """upload_multiple_assets - - :param body: - :type body: ApiCatalogUpload - - :rtype: ApiCatalogUploadResponse - """ - if connexion.request.is_json: - body = ApiCatalogUpload.from_dict(connexion.request.get_json()) # noqa: E501 - - return _upload_multiple_assets(body) - - -def _upload_multiple_assets(body: ApiCatalogUpload): # noqa: E501 - - # TODO: parameterize `publish_all` and `feature_all` flags, maybe? Although - # uploading a whole catalog is an admin activity, who most likely wants to - # register a curated list of assets that are to be published and featured - publish_all = True - feature_all = True - - def get_access_token_for_url(url: str) -> str: - for api_access_token in body.api_access_tokens or []: - if api_access_token.url_host in url: - return api_access_token.api_token - return None - - upload_methods = { - "components": upload_component_from_url, - "datasets": upload_dataset_from_url, - "models": upload_model_from_url, - "notebooks": upload_notebook_from_url, - "pipelines": upload_pipeline_from_url - } - - api_response = ApiCatalogUploadResponse( - components=[], datasets=[], models=[], notebooks=[], pipelines=[], - total_created=0, errors=[], total_errors=0) - - for asset_type, upload_method in upload_methods.items(): - for asset in body.__getattribute__(asset_type) or []: - try: - api_object, status = upload_method( - url=asset.url, name=asset.name, - access_token=get_access_token_for_url(asset.url)) - if 200 <= status < 300: - api_response.__getattribute__(asset_type).append(api_object) - api_response.total_created += 1 - else: - # TODO: remove this? - api_error = ApiCatalogUploadError(**asset.to_dict(), - error_message=f"THIS SHOULD NOT HAPPEN: {str(api_object).strip()}", - status_code=500) - api_response.errors.append(api_error) - print(f"THIS SHOULD NOT HAPPEN: {api_error}") - print(traceback.format_exc()) - - except ApiError as e: - api_error = ApiCatalogUploadError(**asset.to_dict(), - error_message=e.message, - status_code=e.http_status_code) - api_response.errors.append(api_error) - - except Exception as e: - api_error = ApiCatalogUploadError(**asset.to_dict(), - error_message=str(e), - status_code=500) - api_response.errors.append(api_error) - print(traceback.format_exc()) - - api_response.total_errors = len(api_response.errors) - - if publish_all or feature_all: - api_classes = { - "components": ApiComponent, - "datasets": ApiDataset, - "models": ApiModel, - "notebooks": ApiNotebook, - "pipelines": ApiPipelineExtension - } - for asset_type, api_class in api_classes.items(): - asset_list = api_response.__getattribute__(asset_type) - asset_ids = [asset.id for asset in asset_list] - update_multiple(api_class, asset_ids, "publish_approved", publish_all) - update_multiple(api_class, asset_ids, "featured", feature_all) - - response_status = \ - 201 if api_response.total_created > 0 and api_response.total_errors == 0 else \ - 207 if api_response.total_created > 0 and api_response.total_errors > 0 else \ - max([e.status_code for e in api_response.errors]) - - return api_response, response_status diff --git a/api/server/swagger_server/controllers_impl/component_service_controller_impl.py b/api/server/swagger_server/controllers_impl/component_service_controller_impl.py deleted file mode 100644 index 746f4f5a..00000000 --- a/api/server/swagger_server/controllers_impl/component_service_controller_impl.py +++ /dev/null @@ -1,398 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import json -import tarfile -import yaml - -from datetime import datetime -from io import BytesIO -from typing import AnyStr -from werkzeug.datastructures import FileStorage - -from swagger_server.controllers_impl import download_file_content_from_url, \ - get_yaml_file_content_from_uploadfile, validate_parameters -from swagger_server.data_access.minio_client import store_file, delete_objects, \ - get_file_content_and_url, NoSuchKey, enable_anonymous_read_access, create_tarfile -from swagger_server.data_access.mysql_client import store_data, generate_id, load_data, \ - delete_data, num_rows, update_multiple -from swagger_server.gateways.kubeflow_pipeline_service import generate_component_run_script, \ - run_component_in_experiment, _host as KFP_HOST -from swagger_server.models.api_component import ApiComponent # noqa: E501 -from swagger_server.models.api_generate_code_response import ApiGenerateCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_components_response import ApiListComponentsResponse # noqa: E501 -from swagger_server.models.api_metadata import ApiMetadata -from swagger_server.models.api_parameter import ApiParameter # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 - - -def approve_components_for_publishing(component_ids): # noqa: E501 - """approve_components_for_publishing - - :param component_ids: Array of component IDs to be approved for publishing. - :type component_ids: List[str] - - :rtype: None - """ - - update_multiple(ApiComponent, [], "publish_approved", False) - - if component_ids: - update_multiple(ApiComponent, component_ids, "publish_approved", True) - - return None, 200 - - -def create_component(body): # noqa: E501 - """create_component - - :param body: - :type body: dict | bytes - - :rtype: ApiComponent - """ - if connexion.request.is_json: - body = ApiComponent.from_dict(connexion.request.get_json()) # noqa: E501 - - api_component = body - - error = store_data(api_component) - - if error: - return error, 400 - - return api_component, 200 # TODO: return 201 - - -def delete_component(id): # noqa: E501 - """delete_component - - :param id: - :type id: str - - :rtype: None - """ - delete_data(ApiComponent, id) - - delete_objects(bucket_name="mlpipeline", prefix=f"components/{id}/") - - return f"Component {id} was deleted", 200 - - -def download_component_files(id, include_generated_code=None): # noqa: E501 - """ - Returns the component artifacts compressed into a .tgz (.tar.gz) file. - - :param id: - :type id: str - :param include_generated_code: Include generated run script in download - :type include_generated_code: bool - - :rtype: file | binary - """ - tar, bytes_io = create_tarfile(bucket_name="mlpipeline", prefix=f"components/{id}/", - file_extensions=[".yaml", ".yml", ".py", ".md"], - keep_open=include_generated_code) - - if len(tar.members) == 0: - return f"Could not find component with id '{id}'", 404 - - if include_generated_code: - generate_code_response, api_status = generate_component_code(id) - - if api_status == 200: - file_content = generate_code_response.script - file_name = f"run_component.py" - - if file_name in tar.getnames(): - file_name = file_name.replace(".py", "_generated.py") - - tarinfo = tarfile.TarInfo(name=file_name) - tarinfo.size = len(file_content) - file_obj = BytesIO(file_content.encode('utf-8')) - - tar.addfile(tarinfo, file_obj) - - tar.close() - - return bytes_io.getvalue(), 200, {"Content-Disposition": f"attachment; filename={id}.tgz"} - - -def generate_component_code(id): # noqa: E501 - """generate_component_code - - :param id: - :type id: str - - :rtype: ApiGenerateCodeResponse - """ - api_components: [ApiComponent] = load_data(ApiComponent, filter_dict={"id": id}) - - if not api_components: - return f"Component with id '{id}' does not exist", 404 - - api_component = api_components[0] - - # TODO: re-enable check for uploaded script, until then save time by not doing Minio lookup - # source_code = retrieve_file_content(bucket_name="mlpipeline", prefix=f"components/{id}/", - # file_extensions=[".py"]) - source_code = None - - if not source_code: - api_template, _ = get_component_template(id) - source_code = generate_component_run_script(api_component, api_template.url) - - if source_code: - generate_code_response = ApiGenerateCodeResponse(script=source_code) - return generate_code_response, 200 - - else: - return f"Could not generate source code for component {id}", 500 - - -def get_component(id): # noqa: E501 - """get_component - - :param id: - :type id: str - - :rtype: ApiComponent - """ - api_components: [ApiComponent] = load_data(ApiComponent, filter_dict={"id": id}) - - if not api_components: - return "Not found", 404 - - api_component = api_components[0] - - return api_component, 200 - - -def get_component_template(id): # noqa: E501 - """get_component_template - - :param id: - :type id: str - - :rtype: ApiGetTemplateResponse - """ - try: - template_yaml, url = get_file_content_and_url(bucket_name="mlpipeline", - prefix=f"components/{id}/", - file_name="template.yaml") - template_response = ApiGetTemplateResponse(template=template_yaml, url=url) - - return template_response, 200 - - except NoSuchKey: - - return f"Component template with id '{id}' does not exist", 404 - - except Exception as e: - - return str(e), 500 - - -def list_components(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_components - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. - :type filter: str - - :rtype: ApiListComponentsResponse - """ - - if page_size == 0: - return {}, 200 - - # TODO: do not misuse page_token as MySQL result offset - offset = int(page_token) if page_token and page_token.isdigit() else 0 - - filter_dict = json.loads(filter) if filter else None - - api_components: [ApiComponent] = load_data(ApiComponent, filter_dict=filter_dict, sort_by=sort_by, - count=page_size, offset=offset) - - next_page_token = offset + page_size if len(api_components) == page_size else None - - total_size = num_rows(ApiComponent) - - if total_size == next_page_token: - next_page_token = None - - comp_list = ApiListComponentsResponse(components=api_components, total_size=total_size, - next_page_token=next_page_token) - return comp_list, 200 - - -def run_component(id, parameters, run_name=None): # noqa: E501 - """run_component - - :param id: - :type id: str - :param parameters: - :type parameters: List[ApiParameter] - :param run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to component name - :type run_name: str - - :rtype: ApiRunCodeResponse - """ - if KFP_HOST == "UNAVAILABLE": - return f"Kubeflow Pipeline host is 'UNAVAILABLE'", 503 - - if connexion.request.is_json: - parameters = [ApiParameter.from_dict(d) for d in connexion.request.get_json()] # noqa: E501 - - parameter_dict = {p.name: p.value for p in parameters if p.value and p.value.strip() != ""} - - api_component, status_code = get_component(id) - - if status_code > 200: - return f"Component with id '{id}' does not exist", 404 - - parameter_errors, status_code = validate_parameters(api_component.parameters, parameter_dict) - - if parameter_errors: - return parameter_errors, status_code - - api_template, _ = get_component_template(id) - - enable_anonymous_read_access(bucket_name="mlpipeline", prefix="components/*") - - try: - run_id = run_component_in_experiment(api_component, api_template.url, parameter_dict, run_name) - return ApiRunCodeResponse(run_url=f"/runs/details/{run_id}"), 200 - - except Exception as e: - return f"Error while trying to run component {id}: {e}", 500 - - -def set_featured_components(component_ids): # noqa: E501 - """set_featured_components - - :param component_ids: Array of component IDs to be featured. - :type component_ids: List[str] - - :rtype: None - """ - - update_multiple(ApiComponent, [], "featured", False) - - if component_ids: - update_multiple(ApiComponent, component_ids, "featured", True) - - return None, 200 - - -def upload_component(uploadfile: FileStorage, name=None, existing_id=None): # noqa: E501 - """upload_component - - :param uploadfile: The component to upload. Maximum size of 32MB is supported. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: - :type name: str - :param existing_id: The ID of a component to be replaced, INTERNAL USE ONLY - :type existing_id: str - - :rtype: ApiComponent - """ - yaml_file_content = get_yaml_file_content_from_uploadfile(uploadfile) - - return _upload_component_yaml(yaml_file_content, name, existing_id) - - -def upload_component_file(id, uploadfile): # noqa: E501 - """upload_component_file - - :param id: The id of the component. - :type id: str - :param uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - :type uploadfile: werkzeug.datastructures.FileStorage - - :rtype: ApiComponent - """ - # file_type = uploadfile.mimetype - file_name = uploadfile.filename - file_ext = file_name.split(".")[-1] - - if file_ext not in ["tgz", "gz", "yaml", "yml", "py", "md"]: - return f"File extension not supported: '{file_ext}', uploadfile: '{file_name}'.", 501 - - if file_ext in ["tgz", "gz", "yaml", "yml"]: - delete_component(id) - return upload_component(uploadfile, existing_id=id) - else: - return f"The API method 'upload_component_file' is not implemented for file type '{file_ext}'.", 501 - - return "Not implemented (yet).", 501 - - -def upload_component_from_url(url, name=None, access_token=None): # noqa: E501 - """upload_component_from_url - - :param url: URL pointing to the component YAML file. - :type url: str - :param name: Optional, the name of the component to be created overriding the name in the YAML file. - :type name: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiComponent - """ - yaml_file_content = download_file_content_from_url(url, access_token) - - return _upload_component_yaml(yaml_file_content, name) - - -############################################################################### -# private helper methods, not swagger-generated -############################################################################### - -def _upload_component_yaml(yaml_file_content: AnyStr, name=None, existing_id=None): - - yaml_dict = yaml.load(yaml_file_content, Loader=yaml.FullLoader) - - template_metadata = yaml_dict.get("metadata") or dict() - - component_id = existing_id or generate_id(name=name or yaml_dict["name"]) - created_at = datetime.now() - name = name or yaml_dict["name"] - description = (yaml_dict.get("description") or name).strip()[:255] - filter_categories = yaml_dict.get("filter_categories") or dict() - - metadata = ApiMetadata(annotations=template_metadata.get("annotations"), - labels=template_metadata.get("labels"), - tags=template_metadata.get("tags")) - - parameters = [ApiParameter(name=p.get("name"), description=p.get("description"), - default=p.get("default"), value=p.get("value")) - for p in yaml_dict.get("inputs", [])] - - api_component = ApiComponent(id=component_id, - created_at=created_at, - name=name, - description=description, - metadata=metadata, - parameters=parameters, - filter_categories=filter_categories) - - uuid = store_data(api_component) - - api_component.id = uuid - - store_file(bucket_name="mlpipeline", prefix=f"components/{component_id}/", - file_name="template.yaml", file_content=yaml_file_content, - content_type="text/yaml") - - enable_anonymous_read_access(bucket_name="mlpipeline", prefix="components/*") - - return api_component, 201 diff --git a/api/server/swagger_server/controllers_impl/credential_service_controller_impl.py b/api/server/swagger_server/controllers_impl/credential_service_controller_impl.py deleted file mode 100644 index 78d638a3..00000000 --- a/api/server/swagger_server/controllers_impl/credential_service_controller_impl.py +++ /dev/null @@ -1,123 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -import connexion -import json - -from datetime import datetime - -from swagger_server.data_access.mysql_client import store_data, generate_id, load_data, delete_data, num_rows -from swagger_server.gateways.kubernetes_service import create_secret, get_secret, delete_secret, list_secrets,\ - secret_name_prefix -from swagger_server.models.api_credential import ApiCredential # noqa: E501 -from swagger_server.models.api_list_credentials_response import ApiListCredentialsResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 - - -def create_credential(body): # noqa: E501 - """create_credential - - Creates a credential associated with a pipeline. # noqa: E501 - - :param body: - :type body: dict | bytes - - :rtype: ApiCredential - """ - if connexion.request.is_json: - body = ApiCredential.from_dict(connexion.request.get_json()) - - api_credential: ApiCredential = body - - api_credential.id = api_credential.id or f"{secret_name_prefix}-{generate_id(length=16)}".lower() - api_credential.created_at = datetime.now() - - error = store_data(api_credential) - - if error: - return error, 400 - - # TODO: do we need to generate some token or return something generated by K8s? - secret = create_secret(api_credential.id, - {key: value for key, value in api_credential.to_dict().items() - if key not in ["id", "created_at"]}) - - # TODO: remove credential if kubernetes secret was not created - - return api_credential, 200 # TODO: return 201 - - -def delete_credential(id): # noqa: E501 - """delete_credential - - :param id: - :type id: str - - :rtype: None - """ - delete_data(ApiCredential, id) - - delete_secret(id) - - return f"Credential {id} was deleted", 200 - - -def get_credential(id): # noqa: E501 - """get_credential - - :param id: - :type id: str - - :rtype: ApiComponent - """ - api_credentials: [ApiCredential] = load_data(ApiCredential, filter_dict={"id": id}) - - if not api_credentials: - return "Not found", 404 - - api_credential = api_credentials[0] - - secret = get_secret(id) - - return api_credential, 200 - - -def list_credentials(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_credentials - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. - :type filter: str - - :rtype: ApiListCredentialsResponse - """ - - if page_size == 0: - return {}, 200 - - # TODO: do not misuse page_token as MySQL result offset - offset = int(page_token) if page_token and page_token.isdigit() else 0 - - filter_dict = json.loads(filter) if filter else None - - api_credentials: [ApiCredential] = load_data(ApiCredential, filter_dict=filter_dict, sort_by=sort_by, - count=page_size, offset=offset) - - next_page_token = offset + page_size if len(api_credentials) == page_size else None - - total_size = num_rows(ApiCredential) - - if total_size == next_page_token: - next_page_token = None - - secrets = list_secrets(name_prefix=secret_name_prefix) - - # TODO: consolidate kubernetes secrets with MLX registered credentials (i.e. add status field?) - comp_list = ApiListCredentialsResponse(credentials=api_credentials, total_size=total_size, - next_page_token=next_page_token) - return comp_list, 200 \ No newline at end of file diff --git a/api/server/swagger_server/controllers_impl/dataset_service_controller_impl.py b/api/server/swagger_server/controllers_impl/dataset_service_controller_impl.py deleted file mode 100644 index c28af81d..00000000 --- a/api/server/swagger_server/controllers_impl/dataset_service_controller_impl.py +++ /dev/null @@ -1,441 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import json -import tarfile -import yaml - -from datetime import datetime -from io import BytesIO -from typing import AnyStr -from werkzeug.datastructures import FileStorage - -from swagger_server.controllers_impl import download_file_content_from_url, \ - get_yaml_file_content_from_uploadfile, validate_id -from swagger_server.data_access.minio_client import store_file, delete_objects, \ - get_file_content_and_url, NoSuchKey, enable_anonymous_read_access, create_tarfile -from swagger_server.data_access.mysql_client import store_data, generate_id, \ - load_data, delete_data, num_rows, update_multiple -from swagger_server.gateways.kubeflow_pipeline_service import generate_dataset_run_script, \ - run_dataset_in_experiment, _host as KFP_HOST -from swagger_server.models.api_dataset import ApiDataset # noqa: E501 -from swagger_server.models.api_generate_code_response import ApiGenerateCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_datasets_response import ApiListDatasetsResponse # noqa: E501 -from swagger_server.models.api_metadata import ApiMetadata -from swagger_server.models.api_parameter import ApiParameter # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 - - -def approve_datasets_for_publishing(dataset_ids): # noqa: E501 - """approve_datasets_for_publishing - - :param dataset_ids: Array of dataset IDs to be approved for publishing. - :type dataset_ids: List[str] - - :rtype: None - """ - - update_multiple(ApiDataset, [], "publish_approved", False) - - if dataset_ids: - update_multiple(ApiDataset, dataset_ids, "publish_approved", True) - - return None, 200 - - -def create_dataset(body): # noqa: E501 - """create_dataset - - :param body: - :type body: dict | bytes - - :rtype: ApiDataset - """ - if connexion.request.is_json: - body = ApiDataset.from_dict(connexion.request.get_json()) # noqa: E501 - - api_dataset = body - - error = store_data(api_dataset) - - if error: - return error, 400 - - return api_dataset, 200 # TODO: return 201 - - -def delete_dataset(id): # noqa: E501 - """delete_dataset - - :param id: - :type id: str - - :rtype: None - """ - delete_data(ApiDataset, id) - - delete_objects(bucket_name="mlpipeline", prefix=f"datasets/{id}/") - - return f"Dataset {id} was deleted", 200 - - -def download_dataset_files(id, include_generated_code=None): # noqa: E501 - """ - Returns the dataset artifacts compressed into a .tgz (.tar.gz) file. - - :param id: - :type id: str - :param include_generated_code: Include generated run script in download - :type include_generated_code: bool - - :rtype: file | binary - """ - tar, bytes_io = create_tarfile(bucket_name="mlpipeline", prefix=f"datasets/{id}/", - file_extensions=[".yaml", ".yml", ".py", ".md"], - keep_open=include_generated_code) - - if len(tar.members) == 0: - return f"Could not find dataset with id '{id}'", 404 - - if include_generated_code: - generate_code_response, api_status = generate_dataset_code(id) - - if api_status == 200: - file_content = generate_code_response.script - file_name = f"run_dataset.py" - - if file_name in tar.getnames(): - file_name = file_name.replace(".py", "_generated.py") - - tarinfo = tarfile.TarInfo(name=file_name) - tarinfo.size = len(file_content) - file_obj = BytesIO(file_content.encode('utf-8')) - - tar.addfile(tarinfo, file_obj) - - tar.close() - - return bytes_io.getvalue(), 200, {"Content-Disposition": f"attachment; filename={id}.tgz"} - - -def generate_dataset_code(id): # noqa: E501 - """generate_dataset_code - - Generate sample code to use dataset in a pipeline. - - :param id: - :type id: str - - :rtype: ApiGenerateCodeResponse - """ - api_datasets: [ApiDataset] = load_data(ApiDataset, filter_dict={"id": id}) - - if not api_datasets: - return f"Dataset with id '{id}' does not exist", 404 - - api_dataset = api_datasets[0] - - # TODO: could there be multiple pipeline DSL scripts, how to choose - # TODO: re-enable check for uploaded script, until then save time by not doing Minio lookup - # source_code = retrieve_file_content(bucket_name="mlpipeline", prefix=f"datasets/{id}/", - # file_extensions=[".py"]) - source_code = None - - if not source_code: - api_template, _ = get_dataset_template(id) - source_code = generate_dataset_run_script(api_dataset, api_template.url) - - if source_code: - generate_code_response = ApiGenerateCodeResponse(script=source_code) - return generate_code_response, 200 - - return f"Could not generate source code for dataset {id}", 500 - - -def get_dataset(id): # noqa: E501 - """get_dataset - - :param id: - :type id: str - - :rtype: ApiDataset - """ - api_datasets: [ApiDataset] = load_data(ApiDataset, filter_dict={"id": id}) - - if not api_datasets: - return "Not found", 404 - - return api_datasets[0], 200 - - -def get_dataset_template(id): # noqa: E501 - """get_dataset_template - - :param id: - :type id: str - - :rtype: ApiGetTemplateResponse - """ - try: - template_yaml, url = get_file_content_and_url(bucket_name="mlpipeline", - prefix=f"datasets/{id}/", - file_name="template.yaml") - template_response = ApiGetTemplateResponse(template=template_yaml, url=url) - - return template_response, 200 - - except NoSuchKey: - - return f"Dataset template with id '{id}' does not exist", 404 - - except Exception as e: - - return str(e), 500 - - -def list_datasets(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_datasets - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. - :type filter: str - - :rtype: ApiListDatasetsResponse - """ - - if page_size == 0: - return {}, 200 - - # TODO: do not misuse page_token as MySQL result offset - offset = int(page_token) if page_token and page_token.isdigit() else 0 - - filter_dict = json.loads(filter) if filter else None - - api_datasets: [ApiDataset] = load_data(ApiDataset, filter_dict=filter_dict, sort_by=sort_by, - count=page_size, offset=offset) - - next_page_token = offset + page_size if len(api_datasets) == page_size else None - - total_size = num_rows(ApiDataset) - - if total_size == next_page_token: - next_page_token = None - - comp_list = ApiListDatasetsResponse(datasets=api_datasets, total_size=total_size, - next_page_token=next_page_token) - return comp_list, 200 - - -def run_dataset(id, parameters, run_name=None): # noqa: E501 - """run_dataset - - :param id: - :type id: str - :param parameters: - :type parameters: list[ApiParameter] - :param run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to component name - :type run_name: str - - :rtype: ApiRunCodeResponse - """ - if KFP_HOST == "UNAVAILABLE": - return f"Kubeflow Pipeline host is 'UNAVAILABLE'", 503 - - if connexion.request.is_json: - parameters = [ApiParameter.from_dict(d) for d in connexion.request.get_json()] # noqa: E501 - - api_dataset, status_code = get_dataset(id) - - if status_code > 200: - return f"Component with id '{id}' does not exist", 404 - - parameter_dict = {p.name: p.value for p in parameters if p.value and p.value.strip() != ""} - - # parameter_errors, status_code = validate_parameters(api_dataset.parameters, parameter_dict) - - # if parameter_errors: - # return parameter_errors, status_code - - api_template, _ = get_dataset_template(id) - - enable_anonymous_read_access(bucket_name="mlpipeline", prefix="datasets/*") - - try: - run_id = run_dataset_in_experiment(api_dataset, api_template.url, - run_name=run_name, - parameters=parameter_dict) - return ApiRunCodeResponse(run_url=f"/runs/details/{run_id}"), 200 - - except Exception as e: - return f"Error while trying to run dataset {id}: {e}", 500 - - -def set_featured_datasets(dataset_ids): # noqa: E501 - """set_featured_datasets - - :param dataset_ids: Array of dataset IDs to be featured. - :type dataset_ids: List[str] - - :rtype: None - """ - - update_multiple(ApiDataset, [], "featured", False) - - if dataset_ids: - update_multiple(ApiDataset, dataset_ids, "featured", True) - - return None, 200 - - -def upload_dataset(uploadfile: FileStorage, name=None, existing_id=None): # noqa: E501 - """upload_dataset - - :param uploadfile: The dataset YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: - :type name: str - :param existing_id: The ID of a dataset to be replaced, INTERNAL USE ONLY - :type existing_id: str - - :rtype: ApiDataset - """ - yaml_file_content = get_yaml_file_content_from_uploadfile(uploadfile) - - return _upload_dataset_yaml(yaml_file_content, name) - - -def upload_dataset_file(id, uploadfile): # noqa: E501 - """upload_dataset_file - - :param id: The id of the dataset. - :type id: str - :param uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - :type uploadfile: werkzeug.datastructures.FileStorage - - :rtype: ApiDataset - """ - # file_type = uploadfile.mimetype - file_name = uploadfile.filename - file_ext = file_name.split(".")[-1] - - if file_ext not in ["tgz", "gz", "yaml", "yml", "py", "md"]: - return f"File extension not supported: '{file_ext}', uploadfile: '{file_name}'.", 501 - - if file_ext in ["tgz", "gz", "yaml", "yml"]: - delete_dataset(id) - return upload_dataset(uploadfile, existing_id=id) - else: - return f"The API method 'upload_dataset_file' is not implemented for file type '{file_ext}'.", 501 - - return "Not implemented (yet).", 501 - - -def upload_dataset_from_url(url, name=None, access_token=None): # noqa: E501 - """upload_dataset_from_url - - :param url: URL pointing to the dataset YAML file. - :type url: str - :param name: Optional, the name of the dataset to be created overriding the name in the YAML file. - :type name: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiDataset - """ - yaml_file_content = download_file_content_from_url(url, access_token) - - return _upload_dataset_yaml(yaml_file_content, name) - - -############################################################################### -# private helper methods, not swagger-generated -############################################################################### - -def _upload_dataset_yaml(yaml_file_content: AnyStr, name=None, existing_id=None): - - yaml_dict = yaml.load(yaml_file_content, Loader=yaml.FullLoader) - - errors, status = validate_id(yaml_dict.get("id")) - - if errors: - return errors, status - - name = name or yaml_dict["name"] - description = yaml_dict["description"] - dataset_id = existing_id or generate_id(name=yaml_dict.get("id", name)) - created_at = datetime.now() - - # if yaml_dict.get("id") != dataset_id: - # raise ValueError(f"Dataset.id contains non k8s character: {yaml_dict.get('id')}") - - # TODO: re-evaluate if we should use dataset update time as our MLX "created_at" time - if "updated" in yaml_dict: - created_at = datetime.strptime(str(yaml_dict["updated"]), "%Y-%m-%d") - elif "created" in yaml_dict: - created_at = datetime.strptime(str(yaml_dict["created"]), "%Y-%m-%d") - - license_name = yaml_dict["license"]["name"] - domain = yaml_dict["domain"] - format_type = yaml_dict["format"][0]["type"] - size = yaml_dict["content"][0].get("size") - version = yaml_dict["version"] - filter_categories = yaml_dict.get("filter_categories") or dict() - - # # extract number of records and convert thousand separators based on Locale - # num_records_str = yaml_dict["statistics"]["number_of_records"] - # num_records_number_str = num_records_str.split()[0]. \ - # replace("~", ""). \ - # replace("+", ""). \ - # replace("k", "000"). \ - # replace(",", "") # assumes thousand separators in locale.en_US.UTF-8 - # # locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # setting locale does not work reliably in Docker - # # number_of_records = locale.atoi(num_records_number_str) - # number_of_records = int(num_records_number_str) - number_of_records = yaml_dict["content"][0].get("records", 0) - - related_assets = [a["application"].get("asset_id") - for a in yaml_dict.get("related_assets", []) - if "MLX" in a.get("application", {}).get("name", "") - and "asset_id" in a.get("application", {})] - - template_metadata = yaml_dict.get("metadata") or dict() - metadata = ApiMetadata(annotations=template_metadata.get("annotations"), - labels=template_metadata.get("labels"), - tags=template_metadata.get("tags") or yaml_dict.get("seo_tags")) - - # TODO: add "version" to ApiDataset - - api_dataset = ApiDataset( - id=dataset_id, - created_at=created_at, - name=name, - description=description, - domain=domain, - format=format_type, - size=size, - number_of_records=number_of_records, - license=license_name, - metadata=metadata, - related_assets=related_assets, - filter_categories=filter_categories - ) - - uuid = store_data(api_dataset) - - api_dataset.id = uuid - - store_file(bucket_name="mlpipeline", prefix=f"datasets/{api_dataset.id}/", - file_name="template.yaml", file_content=yaml_file_content, - content_type="text/yaml") - - enable_anonymous_read_access(bucket_name="mlpipeline", prefix="datasets/*") - - return api_dataset, 201 diff --git a/api/server/swagger_server/controllers_impl/health_check_controller_impl.py b/api/server/swagger_server/controllers_impl/health_check_controller_impl.py deleted file mode 100644 index 545710ed..00000000 --- a/api/server/swagger_server/controllers_impl/health_check_controller_impl.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -from swagger_server.data_access import minio_client -from swagger_server.data_access import mysql_client -from swagger_server.models.api_status import ApiStatus - - -def health_check(check_database=None, check_object_store=None): # noqa: E501 - """ - Checks if the server is running - - :param check_database: Test connection to MySQL database - :type check_database: bool - :param check_object_store: Test connection to Minio object store - :type check_object_store: bool - - :rtype: None - """ - test_subject = "" - - try: - if check_database: - test_subject = "MySQL" - mysql_client.health_check() - - if check_object_store: - test_subject = "Minio" - minio_client.health_check() - - return "Healthy", 200 - - except Exception as e: - error_msg = "{}: {}".format(test_subject, str(e)) - print(error_msg) - - return ApiStatus(error=error_msg), 500 diff --git a/api/server/swagger_server/controllers_impl/inference_service_controller_impl.py b/api/server/swagger_server/controllers_impl/inference_service_controller_impl.py deleted file mode 100644 index b05b0089..00000000 --- a/api/server/swagger_server/controllers_impl/inference_service_controller_impl.py +++ /dev/null @@ -1,115 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from swagger_server.models.api_inferenceservice import ApiInferenceservice # noqa: E501 -from swagger_server.models.api_list_inferenceservices_response import ApiListInferenceservicesResponse # noqa: E501 - -from swagger_server.gateways.kfserving_client import get_all_services -from swagger_server.gateways.kfserving_client import post_service -from swagger_server.gateways.kfserving_client import from_client_upload_service - -import logging - - -def get_inferenceservices(id, namespace=None): # noqa: E501 - """get_inferenceservices - - # noqa: E501 - - :param id: - :type id: str - :param namespace: - :type namespace: str - - :rtype: ApiInferenceservice - """ - log = logging.getLogger("inf_serv") - # Attempt to find the id in a model mesh predictor - try: - single_service = get_all_services(id, namespace=namespace, group="serving.kserve.io", version="v1alpha1", plural="predictors") - return single_service, 200 - except: - pass - # Attempt to find the id in a kserve inferenceservice - try: - single_service = get_all_services(id, namespace=namespace, group="serving.kserve.io", version="v1beta1", plural="inferenceservices") - return single_service, 200 - except Exception as err: - log.exception("Error when trying to find an inferenceservice: ") - return str(err), 500 - - -def list_inferenceservices(page_token=None, page_size=None, sort_by=None, filter=None, namespace=None): # noqa: E501 - """list_inferenceservices - - # noqa: E501 - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name desc\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. - :type filter: str - :param namespace: - :type namespace: str - - :rtype: ApiListInferenceservicesResponse - """ - log = logging.getLogger("inf_serv") - try: - # Combine the list of items from the modelmesh predictors and kserve inferenceservices - all_mm_services = get_all_services(namespace=namespace, group="serving.kserve.io", version="v1alpha1", plural="predictors") - all_k_services = get_all_services(namespace=namespace, group="serving.kserve.io", version="v1beta1", plural="inferenceservices") - all_mm_services['items'] = all_mm_services['items'] + all_k_services['items'] - return all_mm_services, 200 - except Exception as err: - log.exception("Error when trying to list inferenceservices: ") - return str(err), 500 - - -def create_service(body, namespace=None): # noqa: E501 - """create_service - - # noqa: E501 - - :param body: - :type body: dict | bytes - :param namespace: - :type namespace: str - - :rtype: ApiInferenceservice - """ - log = logging.getLogger("inf_serv") - try: - created_service = post_service(body, namespace=namespace) - return created_service, 200 - except Exception as err: - log.exception("Error when deploying an inferenceservice: ") - return str(err), 500 - - -def upload_service(uploadfile, name=None, namespace=None): # noqa: E501 - """upload_service - - # noqa: E501 - - :param uploadfile: The component to upload. Maximum size of 32MB is supported. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: - :type name: str - :param namespace: - :type namespace: str - - :rtype: ApiComponent - """ - log = logging.getLogger("inf_serv") - try: - uploaded_service = from_client_upload_service(upload_file=uploadfile, namespace=namespace) - return uploaded_service, 200 - except Exception as err: - log.exception("Error when deploying an inferenceservice: ") - return str(err), 500 - diff --git a/api/server/swagger_server/controllers_impl/model_service_controller_impl.py b/api/server/swagger_server/controllers_impl/model_service_controller_impl.py deleted file mode 100644 index 4a68dbe3..00000000 --- a/api/server/swagger_server/controllers_impl/model_service_controller_impl.py +++ /dev/null @@ -1,445 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import json -import tarfile -import yaml - -from datetime import datetime -from io import BytesIO -from typing import AnyStr -from werkzeug.datastructures import FileStorage - -from swagger_server.controllers_impl import download_file_content_from_url, validate_id -from swagger_server.controllers_impl import get_yaml_file_content_from_uploadfile -from swagger_server.data_access.minio_client import store_file, delete_objects, \ - get_file_content_and_url, enable_anonymous_read_access, create_tarfile, NoSuchKey -from swagger_server.data_access.mysql_client import store_data, generate_id, \ - load_data, delete_data, num_rows, update_multiple -from swagger_server.gateways.kubeflow_pipeline_service import generate_model_run_script,\ - run_model_in_experiment, _host as KFP_HOST -from swagger_server.models.api_generate_model_code_response import ApiGenerateModelCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_models_response import ApiListModelsResponse # noqa: E501 -from swagger_server.models.api_model import ApiModel # noqa: E501 -from swagger_server.models.api_model_script import ApiModelScript # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 - - -def approve_models_for_publishing(model_ids): # noqa: E501 - """approve_models_for_publishing - - :param model_ids: Array of model IDs to be approved for publishing. - :type model_ids: List[str] - - :rtype: None - """ - - update_multiple(ApiModel, [], "publish_approved", False) - - if model_ids: - update_multiple(ApiModel, model_ids, "publish_approved", True) - - return None, 200 - - -def create_model(body): # noqa: E501 - """create_model - - :param body: - :type body: dict | bytes - - :rtype: ApiModel - """ - if connexion.request.is_json: - body = ApiModel.from_dict(connexion.request.get_json()) # noqa: E501 - - api_model = body - - error = store_data(api_model) - - if error: - return error, 400 - - return api_model, 200 # TODO: return 201 - - -def delete_model(id): # noqa: E501 - """delete_model - - :param id: - :type id: str - - :rtype: None - """ - delete_data(ApiModel, id) - - delete_objects(bucket_name="mlpipeline", prefix=f"models/{id}/") - - return f"Model {id} was deleted", 200 - - -def download_model_files(id, include_generated_code=None): # noqa: E501 - """ - Returns the model artifacts compressed into a .tgz (.tar.gz) file. - - :param id: - :type id: str - :param include_generated_code: Include generated run scripts in download - :type include_generated_code: bool - - :rtype: file | binary - """ - - tar, bytes_io = create_tarfile(bucket_name="mlpipeline", prefix=f"models/{id}/", - file_extensions=[".yaml", ".yml", ".py", ".md"], - keep_open=include_generated_code) - - if len(tar.members) == 0: - return f"Could not find model with id '{id}'", 404 - - if include_generated_code: - generate_code_response: ApiGenerateModelCodeResponse = generate_model_code(id)[0] - - for s in generate_code_response.scripts: - file_name = f"run_{s.pipeline_stage}_{s.execution_platform}.py" - - if file_name in tar.getnames(): - file_name = file_name.replace(".py", "_generated.py") - - file_content = s.script_code - file_size = len(file_content) - file_obj = BytesIO(file_content.encode('utf-8')) - tarinfo = tarfile.TarInfo(name=file_name) - tarinfo.size = file_size - - tar.addfile(tarinfo, file_obj) - - tar.close() - - return bytes_io.getvalue(), 200, {"Content-Disposition": f"attachment; filename={id}.tgz"} - - -def generate_model_code(id): # noqa: E501 - """generate_model_code - - # noqa: E501 - - :param id: - :type id: str - - :rtype: ApiGenerateModelCodeResponse - """ - api_models: [ApiModel] = load_data(ApiModel, filter_dict={"id": id}) - - if not api_models: - return f"Model with id '{id}' does not exist", 404 - - api_model = api_models[0] - - generate_code_response = ApiGenerateModelCodeResponse(scripts=[]) - - source_combinations = [] - - if api_model.trainable: - source_combinations.extend([("train", p) for p in api_model.trainable_tested_platforms]) - - if api_model.servable: - source_combinations.extend([("serve", p) for p in api_model.servable_tested_platforms]) - - for stage, platform in source_combinations: - # TODO: re-enable check for uploaded script, until then save time by not doing Minio lookup - # source_code = retrieve_file_content(bucket_name="mlpipeline", prefix=f"models/{id}/", - # file_extensions=[".py"], - # file_name_filter=f"{stage}_{platform}") - source_code = None - - if not source_code: - source_code = generate_model_run_script(api_model, stage, platform) - - api_model_script = ApiModelScript(pipeline_stage=stage, - execution_platform=platform, - script_code=source_code) - - generate_code_response.scripts.append(api_model_script) - - return generate_code_response, 200 - - -def get_model(id): # noqa: E501 - """get_model - - :param id: - :type id: str - - :rtype: ApiModel - """ - api_models: [ApiModel] = load_data(ApiModel, filter_dict={"id": id}) - - if not api_models: - return "Not found", 404 - - return api_models[0], 200 - - -def get_model_template(id): # noqa: E501 - """get_model_template - - :param id: - :type id: str - - :rtype: ApiGetTemplateResponse - """ - - try: - template_yaml, url = get_file_content_and_url(bucket_name="mlpipeline", - prefix=f"models/{id}/", - file_name="template.yaml") - template_response = ApiGetTemplateResponse(template=template_yaml) - - return template_response, 200 - - except NoSuchKey: - - return f"Model template with id '{id}' does not exist", 404 - - except Exception as e: - - return str(e), 500 - - -def list_models(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_models - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. - :type filter: str - - :rtype: ApiListModelsResponse - """ - - if page_size == 0: - return {}, 200 - - # TODO: do not misuse page_token as MySQL result offset - offset = int(page_token) if page_token and page_token.isdigit() else 0 - - filter_dict = json.loads(filter) if filter else None - - api_models: [ApiModel] = load_data(ApiModel, - filter_dict=filter_dict, - sort_by=sort_by, - count=page_size, - offset=offset) - - next_page_token = offset + page_size if len(api_models) == page_size else None - - total_size = num_rows(ApiModel) - - if total_size == next_page_token: - next_page_token = None - - model_list = ApiListModelsResponse(models=api_models, total_size=total_size, next_page_token=next_page_token) - - return model_list, 200 - - -def run_model(id, pipeline_stage, execution_platform, run_name=None, parameters: dict = None): # noqa: E501 - """run_model - - :param id: - :type id: str - :param pipeline_stage: pipeline stage, either 'train' or 'serve' - :type pipeline_stage: str - :param execution_platform: execution platform, i.e. 'kubernetes', 'knative' - :type execution_platform: str - :param run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to model identifier - :type run_name: str - :param parameters: optional run parameters, must include 'github_token' and 'github_url' if credentials are required - :type parameters: dict - - :rtype: ApiRunCodeResponse - """ - if KFP_HOST == "UNAVAILABLE": - return f"Kubeflow Pipeline host is 'UNAVAILABLE'", 503 - - api_model, status_code = get_model(id) - - if status_code > 200: - return f"Model with id '{id}' does not exist", 404 - - parameter_errors, status_code = _validate_run_parameters(api_model, pipeline_stage, execution_platform, parameters) - - if parameter_errors: - return parameter_errors, status_code - - try: - run_id = run_model_in_experiment(api_model, pipeline_stage, execution_platform, run_name, parameters) - return ApiRunCodeResponse(run_url=f"/runs/details/{run_id}"), 200 - - except Exception as e: - return f"Error while trying to run model with id '{id}': {e}", 500 - - -def set_featured_models(model_ids): # noqa: E501 - """set_featured_models - - :param model_ids: Array of model IDs to be featured. - :type model_ids: List[str] - - :rtype: None - """ - - update_multiple(ApiModel, [], "featured", False) - - if model_ids: - update_multiple(ApiModel, model_ids, "featured", True) - - return None, 200 - - -def upload_model(uploadfile: FileStorage, name=None, existing_id=None): # noqa: E501 - """upload_model - - :param uploadfile: The model to upload. Maximum size of 32MB is supported. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: - :type name: str - :param existing_id: The model identifier of the model to be replaced, INTERNAL USE ONLY - :type existing_id: str - - :rtype: ApiModel - """ - yaml_file_content = get_yaml_file_content_from_uploadfile(uploadfile) - - return _upload_model_yaml(yaml_file_content, name) - - -def upload_model_file(id, uploadfile): # noqa: E501 - """upload_model_file - - :param id: The model identifier. - :type id: str - :param uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - :type uploadfile: werkzeug.datastructures.FileStorage - - :rtype: ApiModel - """ - file_name = uploadfile.filename - file_ext = file_name.split(".")[-1] - - if file_ext not in ["tgz", "gz", "yaml", "yml", "py", "md"]: - return f"File extension not supported: '{file_ext}', uploadfile: '{file_name}'.", 501 - - if file_ext in ["tgz", "gz", "yaml", "yml"]: - delete_model(id) - return upload_model(uploadfile, existing_id=id) - else: - return f"The API method 'upload_model_file' is not implemented for file type '{file_ext}'.", 501 - - return "Something went wrong?", 500 - - -def upload_model_from_url(url, name=None, access_token=None): # noqa: E501 - """upload_model_from_url - - :param url: URL pointing to the model YAML file. - :type url: str - :param name: Optional, the name of the model to be created overriding the name in the YAML file. - :type name: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiModel - """ - yaml_file_content = download_file_content_from_url(url, access_token) - - return _upload_model_yaml(yaml_file_content, name) - - -############################################################################### -# private helper methods, not swagger-generated -############################################################################### - -def _upload_model_yaml(yaml_file_content: AnyStr, name=None, existing_id=None): - - model_def = yaml.load(yaml_file_content, Loader=yaml.FullLoader) - - errors, status = validate_id(model_def.get("model_identifier")) - - if errors: - return errors, status - - api_model = ApiModel( - id=existing_id or model_def.get("model_identifier") or generate_id(name=name or model_def["name"]), - created_at=datetime.now(), - name=name or model_def["name"], - description=model_def["description"].strip(), - domain=model_def.get("domain") or "", - labels=model_def.get("labels") or dict(), - framework=model_def["framework"], - filter_categories=model_def.get("filter_categories") or dict(), - trainable=model_def.get("train", {}).get("trainable") or False, - trainable_tested_platforms=model_def.get("train", {}).get("tested_platforms") or [], - trainable_credentials_required=model_def.get("train", {}).get("credentials_required") or False, - trainable_parameters=model_def.get("train", {}).get("input_params") or [], - servable=model_def.get("serve", {}).get("servable") or False, - servable_tested_platforms=model_def.get("serve", {}).get("tested_platforms") or [], - servable_credentials_required=model_def.get("serve", {}).get("credentials_required") or False, - servable_parameters=model_def.get("serve", {}).get("input_params") or []) - - # convert comma-separate strings to lists - if type(api_model.trainable_tested_platforms) == str: - api_model.trainable_tested_platforms = api_model.trainable_tested_platforms.replace(", ", ",").split(",") - - if type(api_model.servable_tested_platforms) == str: - api_model.servable_tested_platforms = api_model.servable_tested_platforms.replace(", ", ",").split(",") - - uuid = store_data(api_model) - - api_model.id = uuid - - store_file(bucket_name="mlpipeline", prefix=f"models/{api_model.id}/", - file_name="template.yaml", file_content=yaml_file_content, - content_type="text/yaml") - - enable_anonymous_read_access(bucket_name="mlpipeline", prefix="models/*") - - return api_model, 201 - - -def _validate_run_parameters(api_model: ApiModel, pipeline_stage: str, execution_platform: str, parameters=dict()): - - if pipeline_stage == "train": - if not api_model.trainable: - return f"Model '{api_model.id}' is not trainable", 422 - - if execution_platform not in api_model.trainable_tested_platforms: - return f"'{execution_platform}' is not a tested platform to {pipeline_stage} model '{api_model.id}'. " \ - f"Tested platforms: {api_model.trainable_tested_platforms}", 422 - - if api_model.trainable_credentials_required and not {"github_url", "github_token"} <= parameters.keys(): - return f"'github_url' and 'github_token' are required to {pipeline_stage} model '{api_model.id}'", 422 - - elif pipeline_stage == "serve": - if not api_model.servable: - return f"Model '{api_model.id}' is not servable", 422 - - if execution_platform not in api_model.servable_tested_platforms: - return f"'{execution_platform}' is not a tested platform to {pipeline_stage} model '{api_model.id}'. " \ - f"Tested platforms: {api_model.servable_tested_platforms}", 422 - - if api_model.servable_credentials_required and not {"github_url", "github_token"} <= parameters.keys(): - return f"'github_url' and 'github_token' are required to {pipeline_stage} model '{api_model.id}'", 422 - - else: - return f"Invalid pipeline_stage: '{pipeline_stage}'. Must be one of ['train', 'serve']", 422 - - return None, 200 diff --git a/api/server/swagger_server/controllers_impl/notebook_service_controller_impl.py b/api/server/swagger_server/controllers_impl/notebook_service_controller_impl.py deleted file mode 100644 index 764b6584..00000000 --- a/api/server/swagger_server/controllers_impl/notebook_service_controller_impl.py +++ /dev/null @@ -1,530 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import json -import requests -import tarfile -import yaml - -from datetime import datetime -from io import BytesIO -from os import environ as env -from typing import AnyStr -from urllib.parse import urlparse -from werkzeug.datastructures import FileStorage - -from swagger_server.controllers_impl import download_file_content_from_url, \ - get_yaml_file_content_from_uploadfile, validate_parameters, validate_id -from swagger_server.data_access.minio_client import store_file, delete_objects, \ - get_file_content_and_url, enable_anonymous_read_access, NoSuchKey, \ - create_tarfile, get_object_url -from swagger_server.data_access.mysql_client import store_data, generate_id, \ - load_data, delete_data, num_rows, update_multiple -from swagger_server.gateways.kubeflow_pipeline_service import generate_notebook_run_script,\ - run_notebook_in_experiment, _host as KFP_HOST -from swagger_server.models.api_generate_code_response import ApiGenerateCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_notebooks_response import ApiListNotebooksResponse # noqa: E501 -from swagger_server.models.api_metadata import ApiMetadata -from swagger_server.models.api_notebook import ApiNotebook # noqa: E501 -from swagger_server.models.api_parameter import ApiParameter # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from swagger_server.util import ApiError - - -ghe_api_token = env.get("IBM_GHE_API_TOKEN") - - -def approve_notebooks_for_publishing(notebook_ids): # noqa: E501 - """approve_notebooks_for_publishing - - :param notebook_ids: Array of notebook IDs to be approved for publishing. - :type notebook_ids: List[str] - - :rtype: None - """ - - update_multiple(ApiNotebook, [], "publish_approved", False) - - if notebook_ids: - update_multiple(ApiNotebook, notebook_ids, "publish_approved", True) - - return None, 200 - - -def create_notebook(body): # noqa: E501 - """create_notebook - - :param body: - :type body: dict | bytes - - :rtype: ApiNotebook - """ - if connexion.request.is_json: - body = ApiNotebook.from_dict(connexion.request.get_json()) # noqa: E501 - - api_notebook = body - - error = store_data(api_notebook) - - if error: - return error, 400 - - return api_notebook, 200 # TODO: return 201 - - -def delete_notebook(id): # noqa: E501 - """delete_notebook - - :param id: - :type id: str - - :rtype: None - """ - delete_data(ApiNotebook, id) - - delete_objects(bucket_name="mlpipeline", prefix=f"notebooks/{id}/") - - return f"Notebook {id} was deleted", 200 - - -def download_notebook_files(id, include_generated_code=None): # noqa: E501 - """Returns the notebook artifacts compressed into a .tgz (.tar.gz) file. - - :param id: - :type id: str - :param include_generated_code: Include generated run script in download - :type include_generated_code: bool - - :rtype: file | binary - """ - tar, bytes_io = create_tarfile(bucket_name="mlpipeline", prefix=f"notebooks/{id}/", - file_extensions=[".yaml", ".yml", ".py", ".md"], - keep_open=include_generated_code) - - if len(tar.members) == 0: - return f"Could not find notebook with id '{id}'", 404 - - if include_generated_code: - generate_code_response, api_status = generate_notebook_code(id) - - if api_status == 200: - file_content = generate_code_response.script - file_name = f"run_notebook.py" - - if file_name in tar.getnames(): - file_name = file_name.replace(".py", "_generated.py") - - tarinfo = tarfile.TarInfo(name=file_name) - tarinfo.size = len(file_content) - file_obj = BytesIO(file_content.encode('utf-8')) - - tar.addfile(tarinfo, file_obj) - - tar.close() - - return bytes_io.getvalue(), 200, {"Content-Disposition": f"attachment; filename={id}.tgz"} - - -def generate_notebook_code(id): # noqa: E501 - """generate_notebook_code - - :param id: - :type id: str - - :rtype: ApiGenerateCodeResponse - """ - api_notebooks: [ApiNotebook] = load_data(ApiNotebook, filter_dict={"id": id}) - - if not api_notebooks: - return f"Notebook with id '{id}' does not exist", 404 - - api_notebook = api_notebooks[0] - - # TODO: re-enable check for uploaded script, until then save time by not doing Minio lookup - # source_code = retrieve_file_content(bucket_name="mlpipeline", prefix=f"notebooks/{id}/", - # file_extensions=[".py"]) - source_code = None - - if not source_code: - source_code = generate_notebook_run_script(api_notebook) - - if source_code: - generate_code_response = ApiGenerateCodeResponse(script=source_code) - return generate_code_response, 200 - - else: - return f"Could not generate source code for notebook {id}", 500 - - -def get_notebook(id): - """get_notebook - - :param id: - :type id: str - - :rtype: ApiNotebook - """ - api_notebooks: [ApiNotebook] = load_data(ApiNotebook, filter_dict={"id": id}) - - if not api_notebooks: - return "Not found", 404 - - return api_notebooks[0], 200 - - -def get_notebook_template(id): # noqa: E501 - """get_notebook_template - - :param id: - :type id: str - - :rtype: ApiGetTemplateResponse - """ - try: - template_yaml, url = get_file_content_and_url(bucket_name="mlpipeline", prefix=f"notebooks/{id}/", - file_name="template.yaml") - template_response = ApiGetTemplateResponse(template=template_yaml, url=url) - - return template_response, 200 - - except NoSuchKey: - - return f"Notebook template with id '{id}' does not exist", 404 - - except Exception as e: - - return str(e), 500 - - -def list_notebooks(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_notebooks - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. - :type filter: str - - :rtype: ApiListNotebooksResponse - """ - - if page_size == 0: - return {}, 200 - - # TODO: do not misuse page_token as MySQL result offset - offset = int(page_token) if page_token and page_token.isdigit() else 0 - - filter_dict = json.loads(filter) if filter else None - - api_notebooks: [ApiNotebook] = load_data(ApiNotebook, filter_dict=filter_dict, sort_by=sort_by, - count=page_size, offset=offset) - - next_page_token = offset + page_size if len(api_notebooks) == page_size else None - - total_size = num_rows(ApiNotebook) - - if total_size == next_page_token: - next_page_token = None - - notebooks = ApiListNotebooksResponse(notebooks=api_notebooks, total_size=total_size, - next_page_token=next_page_token) - return notebooks, 200 - - -def run_notebook(id, run_name=None, parameters: dict = None): # noqa: E501 - """run_notebook - - :param id: - :type id: str - :param run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to notebook name - :type run_name: str - :param parameters: optional run parameters, may be required based on pipeline definition - :type parameters: dict - - :rtype: ApiRunCodeResponse - """ - if KFP_HOST == "UNAVAILABLE": - return f"Kubeflow Pipeline host is 'UNAVAILABLE'", 503 - - if not parameters and connexion.request.is_json: - parameter_dict = dict(connexion.request.get_json()) # noqa: E501 - else: - parameter_dict = parameters - - api_notebook, status_code = get_notebook(id) - - if status_code > 200: - return f"Notebook with id '{id}' does not exist", 404 - - # # TODO: Elyra kfp-notebook currently does not pass parameters on to papermill - # if parameters: - # raise ApiError("The 'elyra-ai/kfp-notebook' executor does not support parameters", 422) - - # parameter_errors, status_code = validate_parameters(api_notebook.parameters, parameter_dict) - # - # if parameter_errors: - # return parameter_errors, status_code - - # Elyra pulls the requirements.txt from Minio, requiring anonymous read access - enable_anonymous_read_access(bucket_name="mlpipeline", prefix="notebooks/*") - - try: - run_id = run_notebook_in_experiment(notebook=api_notebook, - parameters=parameter_dict, - run_name=run_name) - - # expected output notebook based on: - # https://github.com/elyra-ai/kfp-notebook/blob/c8f1298/etc/docker-scripts/bootstrapper.py#L188-L190 - notebook_url = get_object_url(bucket_name="mlpipeline", - prefix=f"notebooks/{api_notebook.id}/", - file_extensions=[".ipynb"]) - # TODO: create a "sandboxed" notebook in a subfolder since Elyra overwrites - # the original notebook instead of creating an "-output.ipynb" file: - # https://github.com/elyra-ai/kfp-notebook/blob/c8f1298/etc/docker-scripts/bootstrapper.py#L205 - notebook_output_url = notebook_url.replace(".ipynb", "-output.ipynb") - - # instead return link to the generated output .html for the time being - notebook_output_html = notebook_url.replace(".ipynb", ".html") - - return ApiRunCodeResponse(run_url=f"/runs/details/{run_id}", - run_output_location=notebook_output_html), 200 - except Exception as e: - - return f"Error while trying to run notebook {id}: {e}", 500 - - -def set_featured_notebooks(notebook_ids): # noqa: E501 - """set_featured_notebooks - - :param notebook_ids: Array of notebook IDs to be featured. - :type notebook_ids: List[str] - - :rtype: None - """ - - update_multiple(ApiNotebook, [], "featured", False) - - if notebook_ids: - update_multiple(ApiNotebook, notebook_ids, "featured", True) - - return None, 200 - - -def upload_notebook(uploadfile: FileStorage, name=None, enterprise_github_token=None, existing_id=None): # noqa: E501 - """upload_notebook - - :param uploadfile: The notebook to upload. Maximum size of 32MB is supported. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: - :type name: str - :param enterprise_github_token: Optional GitHub API token providing read-access to notebooks stored on Enterprise GitHub accounts. - :type enterprise_github_token: str - :param existing_id: The ID of a notebook to be replaced, INTERNAL USE ONLY - :type existing_id: str - - :rtype: ApiNotebook - """ - yaml_file_content = get_yaml_file_content_from_uploadfile(uploadfile) - - return _upload_notebook_yaml(yaml_file_content, name, enterprise_github_token) - - -def upload_notebook_file(id, uploadfile): # noqa: E501 - """upload_notebook_file - - :param id: The id of the notebook. - :type id: str - :param uploadfile: The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md) - :type uploadfile: werkzeug.datastructures.FileStorage - - :rtype: ApiNotebook - """ - # file_type = uploadfile.mimetype - file_name = uploadfile.filename - file_ext = file_name.split(".")[-1] - - if file_ext not in ["tgz", "gz", "yaml", "yml", "py", "md"]: - return f"File extension not supported: '{file_ext}', uploadfile: '{file_name}'.", 501 - - if file_ext in ["tgz", "gz", "yaml", "yml"]: - delete_notebook(id) - return upload_notebook(uploadfile, existing_id=id) - else: - return f"The API method 'upload_notebook_file' is not implemented for file type '{file_ext}'.", 501 - - return "Not implemented (yet).", 501 - - -def upload_notebook_from_url(url, name=None, access_token=None): # noqa: E501 - """upload_notebook_from_url - - :param url: URL pointing to the notebook YAML file. - :type url: str - :param name: Optional, the name of the notebook to be created overriding the name in the YAML file. - :type name: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiNotebook - """ - yaml_file_content = download_file_content_from_url(url, access_token) - - return _upload_notebook_yaml(yaml_file_content, name, access_token) - - -############################################################################### -# private helper methods, not swagger-generated -############################################################################### - -def _upload_notebook_yaml(yaml_file_content: AnyStr, name=None, access_token=None, existing_id=None): - - yaml_dict = yaml.load(yaml_file_content, Loader=yaml.FullLoader) - - template_metadata = yaml_dict.get("metadata") or dict() - - errors, status = validate_id(yaml_dict.get("id")) - - if errors: - return errors, status - - notebook_id = existing_id or yaml_dict.get("id") or generate_id(name=name or yaml_dict["name"]) - created_at = datetime.now() - name = name or yaml_dict["name"] - description = yaml_dict["description"].strip() - url = yaml_dict["implementation"]["github"]["source"] - requirements = yaml_dict["implementation"]["github"].get("requirements") - filter_categories = yaml_dict.get("filter_categories") or dict() - - metadata = ApiMetadata(annotations=template_metadata.get("annotations"), - labels=template_metadata.get("labels"), - tags=template_metadata.get("tags")) - - notebook_content = _download_notebook(url, enterprise_github_api_token=access_token) - - # parameters = _extract_notebook_parameters(notebook_content) - # TODO: not using Papermill any longer, notebook parameters no longer valid? - # kfp-notebook has inputs and outputs ? - parameters = dict() - - api_notebook = ApiNotebook(id=notebook_id, - created_at=created_at, - name=name, - description=description, - url=url, - metadata=metadata, - parameters=parameters, - filter_categories=filter_categories) - - uuid = store_data(api_notebook) - - api_notebook.id = uuid - - store_file(bucket_name="mlpipeline", prefix=f"notebooks/{notebook_id}/", - file_name="template.yaml", file_content=yaml_file_content, - content_type="text/yaml") - - s3_url = store_file(bucket_name="mlpipeline", - prefix=f"notebooks/{notebook_id}/", - file_name=url.split("/")[-1].split("?")[0], - file_content=json.dumps(notebook_content).encode()) - - if requirements: - - if _is_url(requirements): - requirements_url = requirements - requirements_txt = download_file_content_from_url(requirements_url).decode() - else: - requirements_txt = "\n".join(requirements.split(",")) - - # TODO: remove this after fixing the Elyra-AI/KFP-Notebook runner so that - # Elyra should install its own requirements in addition to the provided requirements - requirements_elyra_url = "https://github.com/elyra-ai/kfp-notebook/blob/master/etc/requirements-elyra.txt" - requirements_elyra_txt = download_file_content_from_url(requirements_elyra_url).decode() - requirements_elyra = "\n".join([line for line in requirements_elyra_txt.split("\n") - if not line.startswith("#")]) - - requirements_all = f"# Required packages for {api_notebook.name}:\n" \ - f"{requirements_txt}\n" \ - f"# Requirements from {requirements_elyra_url}:\n" \ - f"{requirements_elyra}" - - store_file(bucket_name="mlpipeline", prefix=f"notebooks/{notebook_id}/", - file_name="requirements.txt", file_content=requirements_all.encode()) - - # if the url included an access token, replace the original url with the s3 url - if "?token=" in url or "github.ibm.com" in url: - api_notebook.url = s3_url - update_multiple(ApiNotebook, [notebook_id], "url", s3_url) - enable_anonymous_read_access(bucket_name="mlpipeline", prefix="notebooks/*") - - return api_notebook, 201 - - -def _download_notebook(url: str, enterprise_github_api_token: str) -> dict: - - request_headers = dict() - - if "ibm.com" in url and "?token=" not in url: - if not enterprise_github_api_token and not ghe_api_token: - raise ApiError(f"Must provide API token to access notebooks on Enterprise GitHub: {url}", 422) - else: - request_headers.update({'Authorization': f'token {enterprise_github_api_token or ghe_api_token}'}) - - try: - raw_url = url.replace("/github.ibm.com/", "/raw.github.ibm.com/")\ - .replace("/github.com/", "/raw.githubusercontent.com/")\ - .replace("/blob/", "/") - response = requests.get(raw_url, allow_redirects=True, headers=request_headers) - - if response.ok: - notebook_dict = response.json() - return notebook_dict - - except Exception as e: - raise ApiError(f"Could not download notebook file '{url}'. \n{str(e)}", 422) - - raise ApiError(f"Could not download notebook file '{url}'. Reason: {response.reason}", - response.status_code) - - -def _extract_notebook_parameters(notebook_dict: dict) -> [ApiParameter]: - """deprecated: was used to determine Papermill notebook parameters""" - - # try: - # parameters: [ApiParameter] = [] - # - # for cell in notebook_dict["cells"]: - # if "parameters" in cell["metadata"].get("tags", {}): - # for line in cell["source"]: - # # match = re.match(r"(?P\w+) *= *(?P.+)", line) - # match = re.match(r"(?P\w+) *= *(?P.+)(# *(?P.+) *)?", line) - # - # if match: - # var_decl = match.groupdict() - # api_parameter = ApiParameter(name=var_decl.get("var_name"), - # description=var_decl.get("var_description"), - # default=var_decl.get("var_value").strip('"').strip("'"), - # value=None) - # parameters.append(api_parameter) - # break - # - # return parameters - # - # except Exception as e: - # raise ApiError(str(e), 422) - - return [] - - -def _is_url(url): - try: - result = urlparse(url) - return all([result.scheme, result.netloc]) - except ValueError: - return False diff --git a/api/server/swagger_server/controllers_impl/pipeline_service_controller_impl.py b/api/server/swagger_server/controllers_impl/pipeline_service_controller_impl.py deleted file mode 100644 index 10cca6b7..00000000 --- a/api/server/swagger_server/controllers_impl/pipeline_service_controller_impl.py +++ /dev/null @@ -1,455 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import connexion -import json -import os -import typing -import yaml - -from datetime import datetime -from collections import Counter -from typing import AnyStr - -from swagger_server.controllers_impl import download_file_content_from_url -from swagger_server.controllers_impl import get_yaml_file_content_from_uploadfile -from swagger_server.data_access.minio_client import store_file, delete_object, \ - delete_objects, get_file_content_and_url, NoSuchKey, \ - enable_anonymous_read_access, create_tarfile -from swagger_server.data_access.mysql_client import store_data, generate_id, load_data, \ - delete_data, num_rows, update_multiple -from swagger_server.gateways.kubeflow_pipeline_service import upload_pipeline_to_kfp,\ - delete_kfp_pipeline, run_pipeline_in_experiment, run_custom_pipeline_in_experiment, \ - _host as KFP_HOST -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_pipelines_response import ApiListPipelinesResponse # noqa: E501 -from swagger_server.models.api_pipeline import ApiPipeline # noqa: E501 -from swagger_server.models import ApiPipelineCustomRunPayload, ApiPipelineTask # , ApiPipelineDAG -from swagger_server.models.api_parameter import ApiParameter -from swagger_server.models.api_pipeline_extension import ApiPipelineExtension # noqa: E501 -from swagger_server.models.api_pipeline_extended import ApiPipelineExtended # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from tempfile import mkstemp - - -def approve_pipelines_for_publishing(pipeline_ids): # noqa: E501 - """approve_pipelines_for_publishing - - :param pipeline_ids: Array of pipeline IDs to be approved for publishing. - :type pipeline_ids: List[str] - - :rtype: None - """ - pipe_exts: [ApiPipelineExtension] = load_data(ApiPipelineExtension) - pipe_ext_ids = {p.id for p in pipe_exts} - missing_pipe_ext_ids = set(pipeline_ids) - pipe_ext_ids - - for id in missing_pipe_ext_ids: - store_data(ApiPipelineExtension(id=id)) - - update_multiple(ApiPipelineExtension, [], "publish_approved", False) - - if pipeline_ids: - update_multiple(ApiPipelineExtension, pipeline_ids, "publish_approved", True) - - return None, 200 - - -def create_pipeline(body): # noqa: E501 - """create_pipeline - - :param body: - :type body: dict | bytes - - :rtype: ApiPipeline - """ - if connexion.request.is_json: - body = ApiPipeline.from_dict(connexion.request.get_json()) # noqa: E501 - - return "Not implemented, yet", 501 - - -def delete_pipeline(id): # noqa: E501 - """delete_pipeline - - :param id: - :type id: str - - :rtype: None - """ - - if KFP_HOST == "UNAVAILABLE": - # TODO delete pipeline_versions first - delete_data(ApiPipeline, id) - if id == "*": - delete_objects(bucket_name="mlpipeline", prefix=f"pipelines/") - else: - delete_object(bucket_name="mlpipeline", prefix="pipelines", file_name=f"{id}") - else: - # wildcard '*' deletes (and recreates) entire table, not desired for pipelines table, KFP API does not accept "*" - if id != "*": - delete_kfp_pipeline(id) - - delete_data(ApiPipelineExtension, id) - - # wildcard '*' deletes (and recreates) entire table, forced schema migration for pipeline_extensions table - if id == "*": - delete_data(ApiPipelineExtended, id) - - return None, 200 - - -def download_pipeline_files(id): # noqa: E501 - """Returns the pipeline YAML compressed into a .tgz (.tar.gz) file. - - :param id: - :type id: str - - :rtype: file - """ - tar, bytes_io = create_tarfile(bucket_name="mlpipeline", prefix=f"pipelines/{id}", - file_extensions=[""], - keep_open=False) - - if len(tar.members) == 0: - return f"Could not find pipeline with id '{id}'", 404 - - return bytes_io.getvalue(), 200, {"Content-Disposition": f"attachment; filename={id}.tgz"} - - -def get_pipeline(id): # noqa: E501 - """get_pipeline - - :param id: - :type id: str - - :rtype: ApiPipelineExtended - """ - api_pipelines: [ApiPipelineExtended] = load_data(ApiPipelineExtended, filter_dict={"id": id}) - - if not api_pipelines: - return "Not found", 404 - - api_pipeline = api_pipelines[0] - - return api_pipeline, 200 - - -def get_template(id): # noqa: E501 - """get_template - - :param id: - :type id: str - - :rtype: ApiGetTemplateResponse - """ - try: - template_yaml, url = get_file_content_and_url(bucket_name="mlpipeline", prefix="pipelines", file_name=id) - template_response = ApiGetTemplateResponse(template=template_yaml, url=url) - - return template_response, 200 - - except NoSuchKey: - - return f"Pipeline template with id '{id}' does not exist", 404 - - except Exception as e: - - return str(e), 500 - - -def list_pipelines(page_token=None, page_size=None, sort_by=None, filter=None): # noqa: E501 - """list_pipelines - - :param page_token: - :type page_token: str - :param page_size: - :type page_size: int - :param sort_by: Can be format of \"field_name\", \"field_name asc\" or \"field_name des\" Ascending by default. - :type sort_by: str - :param filter: A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property. - :type filter: str - - :rtype: ApiListPipelinesResponse - """ - - if page_size == 0: - return {}, 200 - - # TODO: do not misuse page_token as MySQL result offset - offset = int(page_token) if page_token and page_token.isdigit() else 0 - - filter_dict = json.loads(filter) if filter else {} - - # TODO: add filter_categories to ApiPipelineExtension (and give users a way - # to add category labels to pipelines) until then remove categories from filter - if "filter_categories" in filter_dict: - del filter_dict["filter_categories"] - - api_pipelines: [ApiPipeline] = load_data(ApiPipelineExtended, filter_dict=filter_dict, - sort_by=sort_by, count=page_size, offset=offset) - - next_page_token = offset + page_size if len(api_pipelines) == page_size else None - - total_size = num_rows(ApiPipeline) - - if total_size == next_page_token: - next_page_token = None - - pipeline_list = ApiListPipelinesResponse(pipelines=api_pipelines, total_size=total_size, - next_page_token=next_page_token) - return pipeline_list, 200 - - -def run_custom_pipeline(run_custom_pipeline_payload, run_name=None): # noqa: E501 - """run_custom_pipeline - - Run a complex pipeline defined by a directed acyclic graph (DAG) - - :param run_custom_pipeline_payload: A custom pipeline defined by a directed acyclic graph (DAG) and input parameters - :type run_custom_pipeline_payload: dict | bytes - :param run_name: Name to identify the run on the Kubeflow Pipelines UI - :type run_name: str - - :rtype: ApiRunCodeResponse - """ - if connexion.request.is_json: - run_custom_pipeline_payload = ApiPipelineCustomRunPayload.from_dict(connexion.request.get_json()) # noqa: E501 - - run_parameters = run_custom_pipeline_payload.run_parameters or {} - custom_pipeline = run_custom_pipeline_payload.custom_pipeline - - # ensure unique task names - task_names = [t.name for t in custom_pipeline.dag.tasks] - duplicate_task_names = [name for name, count in Counter(task_names).items() if count > 1] - assert not duplicate_task_names, f"duplicate task names: {duplicate_task_names}" - - # validate pipeline dependencies - pipeline_tasks_by_name: typing.Dict[str, ApiPipelineTask] = {t.name: t for t in custom_pipeline.dag.tasks} - for t in pipeline_tasks_by_name.values(): - for required_task_name in t.dependencies or []: - assert required_task_name in pipeline_tasks_by_name, \ - f"missing task '{required_task_name}', as dependency for task '{t.name}'" - - # validate input parameters - missing_run_parameters = {p.name for p in custom_pipeline.inputs.parameters - if p.default is None and p.value is None} - run_parameters.keys() - assert not missing_run_parameters, f"missing parameters to run pipeline: {missing_run_parameters}" - - # make sure we enable anonymous read access to pipeline task components - for artifact_type in set([t.artifact_type for t in pipeline_tasks_by_name.values()]): - enable_anonymous_read_access(bucket_name="mlpipeline", prefix=f"{artifact_type}s/*") - - try: - run_id = run_custom_pipeline_in_experiment(custom_pipeline, run_name, run_parameters) - return ApiRunCodeResponse(run_url=f"/runs/details/{run_id}"), 200 - - except Exception as e: - # TODO: remove traceback? - import traceback - print(traceback.format_exc()) - return f"Error while trying to run custom pipeline '{run_name}': {e}", 500 - - -def run_pipeline(id, run_name=None, parameters=None): # noqa: E501 - """run_pipeline - - :param id: - :type id: str - :param run_name: name to identify the run on the Kubeflow Pipelines UI, defaults to pipeline name - :type run_name: str - :param parameters: optional run parameters, may be required based on pipeline definition - :type parameters: dict - - :rtype: ApiRunCodeResponse - """ - if KFP_HOST == "UNAVAILABLE": - return f"Kubeflow Pipeline host is 'UNAVAILABLE'", 503 - - if not parameters and connexion.request.is_json: - parameter_dict = dict(connexion.request.get_json()) # noqa: E501 - else: - parameter_dict = parameters - - api_pipeline, status_code = get_pipeline(id) - - if status_code > 200: - return f"Pipeline with id '{id}' does not exist", 404 - - parameter_errors, status_code = _validate_parameters(api_pipeline, parameter_dict) - - if parameter_errors: - return parameter_errors, status_code - - try: - run_id = run_pipeline_in_experiment(api_pipeline, parameter_dict, run_name) - return ApiRunCodeResponse(run_url=f"/runs/details/{run_id}"), 200 - - except Exception as e: - return f"Error while trying to run pipeline {id}: {e}", 500 - - -def set_featured_pipelines(pipeline_ids): # noqa: E501 - """set_featured_pipelines - - :param pipeline_ids: Array of pipeline IDs to be featured. - :type pipeline_ids: List[str] - - :rtype: None - """ - pipe_exts: [ApiPipelineExtension] = load_data(ApiPipelineExtension) - pipe_ext_ids = {p.id for p in pipe_exts} - missing_pipe_ext_ids = set(pipeline_ids) - pipe_ext_ids - - for id in missing_pipe_ext_ids: - store_data(ApiPipelineExtension(id=id)) - - update_multiple(ApiPipelineExtension, [], "featured", False) - - if pipeline_ids: - update_multiple(ApiPipelineExtension, pipeline_ids, "featured", True) - - return None, 200 - - -def upload_pipeline(uploadfile, name=None, description=None, labels=None, annotations=None): # noqa: E501 - """upload_pipeline - - :param uploadfile: The pipeline to upload. Maximum size of 32MB is supported. - :type uploadfile: werkzeug.datastructures.FileStorage - :param name: A name for this pipeline, optional - :type name: str - :param description: A description for this pipeline, optional - :type description: str - :param labels: A string representation of a JSON dictionary of labels describing this pipeline, optional.See https://kubernetes.io/docs/concepts/overview/working-with-objects/labels - :type labels: str - :param annotations: A string representation of a JSON dictionary of annotations describing this pipeline, optional.See https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations - :type annotations: str - - :rtype: ApiPipelineExtended - """ - yaml_file_content = get_yaml_file_content_from_uploadfile(uploadfile) - - return _upload_pipeline_yaml(yaml_file_content, name, description, labels, annotations) - - -def upload_pipeline_from_url(url, name=None, access_token=None): # noqa: E501 - """upload_pipeline_from_url - - :param url: URL pointing to the pipeline YAML file. - :type url: str - :param name: Optional, the name of the pipeline to be created overriding the name in the YAML file. - :type name: str - :param access_token: Optional, the Bearer token to access the 'url'. - :type access_token: str - - :rtype: ApiPipeline - """ - yaml_file_content = download_file_content_from_url(url, access_token) - - return _upload_pipeline_yaml(yaml_file_content, name) - - -############################################################################### -# private helper methods, not swagger-generated -############################################################################### - -def _upload_pipeline_yaml(yaml_file_content: AnyStr, name=None, description=None, labels=None, annotations=None): - - (fd, filename) = mkstemp(suffix=".yaml") - - try: - with os.fdopen(fd, "wb") as f: - f.write(yaml_file_content) - - if KFP_HOST == "UNAVAILABLE": - # when running inside Docker Compose w/out KFP we store pipelines ourselves - api_pipeline: ApiPipeline = _store_pipeline(yaml_file_content, name, description) - - else: - # when deployed on top of KFP, we let KFP store pipelines - - # KFP does not extract the description, so let's parse that out - if not description: - yaml_dict = yaml.load(yaml_file_content, Loader=yaml.FullLoader) - template_metadata = yaml_dict.get("metadata") or dict() - annotations = template_metadata.get("annotations", {}) - pipeline_spec = json.loads(annotations.get("pipelines.kubeflow.org/pipeline_spec", "{}")) - description = description or pipeline_spec.get("description", "").strip() - - api_pipeline: ApiPipeline = upload_pipeline_to_kfp(filename, name, description) - - store_data(ApiPipelineExtension(id=api_pipeline.id)) - - if annotations: - if type(annotations) == str: - annotations = json.loads(annotations) - update_multiple(ApiPipelineExtension, [api_pipeline.id], "annotations", annotations) - - api_pipeline_extended, _ = get_pipeline(api_pipeline.id) - - finally: - os.remove(filename) - - return api_pipeline_extended, 201 - - -def _store_pipeline(yaml_file_content: AnyStr, name=None, description=None): - # - # Note: this code path is only used in Docker Compose without KFP - # - yaml_dict = yaml.load(yaml_file_content, Loader=yaml.FullLoader) - - template_metadata = yaml_dict.get("metadata") or dict() - annotations = template_metadata.get("annotations", {}) - pipeline_spec = json.loads(annotations.get("pipelines.kubeflow.org/pipeline_spec", "{}")) - - name = name or template_metadata["name"] - description = description or pipeline_spec.get("description", "").strip() - namespace = pipeline_spec.get("namespace", "").strip() - pipeline_id = "-".join([generate_id(length=l) for l in [8, 4, 4, 4, 12]]) - created_at = datetime.now() - - parameters = [ApiParameter(name=p.get("name"), description=p.get("description"), - default=p.get("default"), value=p.get("value")) - for p in yaml_dict["spec"].get("params", {})] - - api_pipeline = ApiPipeline(id=pipeline_id, - created_at=created_at, - name=name, - description=description, - parameters=parameters, - namespace=namespace) - - uuid = store_data(api_pipeline) - - api_pipeline.id = uuid - - store_file(bucket_name="mlpipeline", prefix=f"pipelines/", - file_name=f"{pipeline_id}", file_content=yaml_file_content, - content_type="text/yaml") - - enable_anonymous_read_access(bucket_name="mlpipeline", prefix="pipelines/*") - - return api_pipeline - - -def _validate_parameters(api_pipeline: ApiPipeline, parameters: dict) -> (str, int): - - acceptable_parameters = [p.name for p in api_pipeline.parameters] - unexpected_parameters = set(parameters.keys()) - set(acceptable_parameters) - - if unexpected_parameters: - return f"Unexpected parameter(s): {list(unexpected_parameters)}. " \ - f"Acceptable parameter(s): {acceptable_parameters}", 422 - - missing_parameters = [p.name for p in api_pipeline.parameters - if not (p.default or p.value) and p.name not in parameters] - - # TODO: figure out a way to determine if a pipeline parameter is required or not. - # just testing for default value is not an indicator - # if missing_parameters: - # return f"Missing required parameter(s): {missing_parameters}", 422 - - return None, 200 diff --git a/api/server/swagger_server/data_access/__init__.py b/api/server/swagger_server/data_access/__init__.py deleted file mode 100644 index 088cda17..00000000 --- a/api/server/swagger_server/data_access/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 diff --git a/api/server/swagger_server/data_access/minio_client.py b/api/server/swagger_server/data_access/minio_client.py deleted file mode 100644 index c0d689a8..00000000 --- a/api/server/swagger_server/data_access/minio_client.py +++ /dev/null @@ -1,264 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import json -import os -import tarfile -import tempfile - -from io import BytesIO -from minio import Minio -from minio.error import NoSuchKey, NoSuchBucketPolicy, ResponseError -from pprint import pprint -from swagger_server.util import ApiError -from tarfile import TarFile -from urllib3 import Timeout -from werkzeug.datastructures import FileStorage - - -_namespace = os.environ.get("POD_NAMESPACE", "kubeflow") -_host = os.environ.get("MINIO_SERVICE_SERVICE_HOST", "minio-service.%s.svc.cluster.local" % _namespace) -_port = os.environ.get("MINIO_SERVICE_SERVICE_PORT", "9000") -_access_key = 'minio' -_secret_key = 'minio123' - - -_bucket_policy_sid = "AllowPublicReadAccess" -_bucket_policy_stmt = { - "Sid": _bucket_policy_sid, - "Action": ["s3:GetObject"], - "Effect": "Allow", - "Principal": {"AWS": ["*"]}, - "Resource": [] -} -_bucket_policy_template = { - "Version": "2012-10-17", - "Statement": [_bucket_policy_stmt] -} - - -def _get_minio_client(timeout=None): - client = Minio(f"{_host}:{_port}", access_key=_access_key, secret_key=_secret_key, secure=False) - - if timeout != Timeout.DEFAULT_TIMEOUT: - client._http.connection_pool_kw["timeout"] = timeout - - return client - - -def health_check(): - client = _get_minio_client(timeout=Timeout(connect=0.1, read=0.1)) - client.list_buckets() - return True - - -def store_file(bucket_name, prefix, file_name, file_content, content_type="application/octet-stream") -> str: - client = _get_minio_client() - f = tempfile.TemporaryFile() - f.write(file_content) - size = f.tell() - f.seek(0) # return to beginning of file - object_name = f"{prefix.rstrip('/')}/{file_name}" - client.put_object(bucket_name, object_name, f, size, content_type) # f.read() - f.close() # close and delete temporary file - object_url = f"http://{_host}:{_port}/{bucket_name}/{object_name}" - return object_url - - -def store_tgz(bucket_name, prefix, tgz_file: FileStorage): - client = _get_minio_client() - tar = tarfile.open(fileobj=tgz_file.stream, mode="r:gz") - - for member in tar.getmembers(): - file_ext = os.path.splitext(member.name)[-1].lower() - - if file_ext in [".yaml", ".yml", ".md", ".py"]: - object_name = f"{prefix.rstrip('/')}/{member.name}" - f = tar.extractfile(member) - client.put_object(bucket_name, object_name, f, f.raw.size, "text/plain") # f.read() - f.close() - - tar.close() - tgz_file.close() - - return True - - -def extract_yaml_from_tarfile(uploadfile: FileStorage, filename_filter: str = "", reset_after_read=False) -> str: - tar = tarfile.open(fileobj=uploadfile.stream, mode="r:gz") - - for member in tar.getmembers(): - - file_name = member.name - - # ignore ._ files in tar balls created by Mac OS - # https://superuser.com/questions/61185/why-do-i-get-files-like-foo-in-my-tarball-on-os-x - if file_name.startswith("._"): - continue - - file_ext = file_name.split(".")[-1] - - if file_ext in ["yaml", "yml"] and filename_filter in file_name: - f = tar.extractfile(member) - yaml_file_content = f.read() - - if reset_after_read: - uploadfile.stream.seek(0) # reset the upload file stream, we might need to re-read later - - f.close() - tar.close() - return yaml_file_content - - return None - - -def create_tarfile(bucket_name: str, prefix: str, file_extensions: [str], keep_open=False) -> (TarFile, BytesIO): - client = _get_minio_client() - objects = client.list_objects(bucket_name, prefix=prefix, recursive=True) - - tar_file = BytesIO() - tar = tarfile.open(mode="w:gz", fileobj=tar_file) - - for o in objects: - file_name = o.object_name.split("/")[-1] - file_ext = os.path.splitext(file_name)[-1].lower() - - if file_extensions and file_ext not in file_extensions: - continue - - if not file_ext and prefix.startswith("pipelines/"): - file_name = "pipeline.yaml" - - file_content = client.get_object(bucket_name, o.object_name) - file_obj = BytesIO(file_content.data) - file_size = file_content.tell() - tarinfo = tarfile.TarInfo(name=file_name) - tarinfo.size = file_size - tar.addfile(tarinfo, file_obj) - - if not keep_open: - tar.close() - - return tar, tar_file - - -def get_file_content_and_url(bucket_name, prefix, file_name) -> (str, str): - client = _get_minio_client() - object_name = f"{prefix.rstrip('/')}/{file_name}" - file_content = client.get_object(bucket_name, object_name) - object_url = f"http://{_host}:{_port}/{bucket_name}/{object_name}" - return file_content.data.decode('utf-8'), object_url - - -def retrieve_file_content_and_url(bucket_name, prefix, file_extensions: [str], file_name_filter="") -> [(str, str)]: - client = _get_minio_client() - objects = client.list_objects(bucket_name, prefix=prefix, recursive=True) - - files_w_url = [] - - for o in objects: - file_ext = os.path.splitext(o.object_name)[-1].lower() - - if file_ext in file_extensions and file_name_filter in o.object_name: - file_content = client.get_object(bucket_name, o.object_name) - object_url = f"http://{_host}:{_port}/{bucket_name}/{o.object_name}" - files_w_url.append((file_content.data.decode('utf-8'), object_url)) - - return files_w_url - - -def retrieve_file_content(bucket_name, prefix, file_extensions: [str], file_name_filter: str = ""): - - files_w_url = retrieve_file_content_and_url(bucket_name, prefix, file_extensions, file_name_filter) - - if files_w_url: - (file_content, url) = files_w_url[0] # TODO: return first result only? - return file_content - - return None - - -def get_object_url(bucket_name, prefix, file_extensions: [str], file_name_filter: str = ""): - - files_w_url = retrieve_file_content_and_url(bucket_name, prefix, file_extensions, file_name_filter) - - if files_w_url: - (file_content, url) = files_w_url[0] # TODO: return first result only? - return url - - return None - - -def delete_object(bucket_name, prefix, file_name): - client = _get_minio_client() - try: - object_name = f"{prefix.rstrip('/')}/{file_name}" - client.remove_object(bucket_name, object_name) - return True - except NoSuchKey as e: - print(e.message) - return False - - -def delete_objects(bucket_name, prefix): - client = _get_minio_client() - try: - if prefix.endswith("/*/"): - prefix = prefix[:-2] - - objects = client.list_objects(bucket_name, prefix=prefix, recursive=True) - object_names = [obj.object_name for obj in objects if not obj.is_dir] - maybe_errors = client.remove_objects(bucket_name, object_names) - actual_errors = [(e.object_name, e.error_code, e.error_message) for e in maybe_errors] - - if actual_errors: - pprint(actual_errors) - return False - - return True - - except NoSuchKey as e: - print(e.message) - return False - - -def enable_anonymous_read_access(bucket_name, prefix): - _update_bucket_policy(bucket_name, f"{prefix.split('/')[0]}/*") - - -def _update_bucket_policy(bucket_name: str, prefix: str): - client = _get_minio_client() - - try: - bucket_policy = json.loads(client.get_bucket_policy(bucket_name)) - except NoSuchBucketPolicy: - bucket_policy = dict(_bucket_policy_template) - - getobject_stmts = [s for s in bucket_policy["Statement"] if s.get("Sid") == _bucket_policy_sid] or \ - [s for s in bucket_policy["Statement"] if "s3:GetObject" in s["Action"]] - - if not getobject_stmts: - bucket_policy["Statement"].append(_bucket_policy_stmt) - getobject_stmts = bucket_policy["Statement"][-1] - - resources = getobject_stmts[-1]["Resource"] - - new_resource = f"arn:aws:s3:::{bucket_name}/{prefix}" - - if new_resource not in resources and not any([r.strip("*") in new_resource for r in resources]): - resources.append(new_resource) - - new_policy_str = json.dumps(bucket_policy) - - try: - client.set_bucket_policy(bucket_name, new_policy_str) - - except ResponseError as e: - - if e.code == 'XMinioPolicyNesting': - raise ApiError( - f"{e.message.split('.')[0]}." - f" New policy: '{new_policy_str}'." - f" Existing policy: '{client.get_bucket_policy(bucket_name)}'") - diff --git a/api/server/swagger_server/data_access/mysql_client.py b/api/server/swagger_server/data_access/mysql_client.py deleted file mode 100644 index 0f90689c..00000000 --- a/api/server/swagger_server/data_access/mysql_client.py +++ /dev/null @@ -1,783 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import inflection -import inspect -import json -import typing - -from datetime import datetime -from kfp_tekton.compiler._k8s_helper import sanitize_k8s_name -from mysql.connector import connect, errorcode, Error -from mysql.connector.errors import IntegrityError -from os import environ as env -from random import choice -from string import ascii_letters, digits, hexdigits -from swagger_server.models.base_model_ import Model -from swagger_server.models import * # required for dynamic Api ...Extension class loading during View-table creation -from swagger_server.util import _deserialize, ApiError -from typing import List - - -_namespace = env.get("POD_NAMESPACE", "kubeflow") -_host = env.get("MYSQL_SERVICE_HOST", "mysql.%s.svc.cluster.local" % _namespace) -_port = env.get("MYSQL_SERVICE_PORT", "3306") -_database = 'mlpipeline' -_user = 'root' - -existing_tables = dict() - -# map Python data types of the Swagger model object's attributes to MySQL column types -type_map = { - str: 'varchar(255)', - int: 'int(11)', - bool: 'tinyint(1)', - list: 'longtext', - dict: 'longtext', - Model: 'longtext', - datetime: 'bigint(20)' -} -# some attributes do not comply to the defaults in the type_map (KFP idiosyncrasy) -custom_col_types = { - "ApiAsset": { - "filter_categories": "json", - }, - "ApiPipeline": { - "description": "longtext", - "namespace": "varchar(63)", - }, -} -# add custom column types for sub-classes of ApiAsset -for asset_type in ApiAsset.__subclasses__(): - custom_col_types[asset_type.__name__] = custom_col_types["ApiAsset"] -# add custom column types for sub-class(es) of ApiPipeline -custom_col_types["ApiPipelineExtended"] = custom_col_types["ApiPipeline"] - - -# some Swagger attributes names have special MySQL column names (KFP idiosyncrasy) -attribute_name_to_column_name = { - 'id': 'UUID', - 'created_at': 'CreatedAtInSec' -} -column_name_to_attribute_name = {v: k for (k, v) in attribute_name_to_column_name.items()} # Note: overrides duplicates - - -############################################################################## -# methods to convert between Swagger and MySQL -############################################################################## - -def _convert_value_to_mysql(value, python_type: type, mysql_type_override: str = None, quote_str=False): - - # turn child attributes of type swagger._base_model.Model into dicts - def to_dict(v): - return v.to_dict() if hasattr(v, "to_dict") else v - - if type(python_type) == typing._GenericAlias: # or str(python_type).startswith("typing."): - python_type = eval(python_type._name.lower()) - - if value and not issubclass(type(value), python_type) \ - and not (isinstance(value, dict) and issubclass(python_type, Model)): - err_msg = f"The type '{type(value)}' does not match expected target type '{python_type}' for value '{value}'" - raise ApiError(err_msg, 422) - - if not value: - if python_type == bool: - return False - elif python_type in [int, float]: - return 0 - elif python_type == dict and mysql_type_override == "json": - return "{}" - elif python_type in [str, dict, list] or issubclass(python_type, Model): - return "" - else: - return None - - if hasattr(value, "to_dict"): - mysql_value = json.dumps(value.to_dict()) - - elif python_type == list: # or isinstance(value, list): - mysql_value = json.dumps(list(map(to_dict, value))) - - elif python_type == dict or issubclass(python_type, Model) and isinstance(value, dict): - mysql_value = json.dumps(dict(map(lambda item: (item[0], to_dict(item[1])), value.items()))) - - elif python_type == datetime: # or isinstance(value, datetime): - mysql_value = int(value.timestamp()) - - else: - mysql_value = value - - # DON'T quote strings when using MySQL queries with parameters - if mysql_value and quote_str and type(mysql_value) == str: - mysql_value_escaped = mysql_value.replace("'", r"\'") - mysql_value = f"'{mysql_value_escaped}'" - - return mysql_value - - -def _convert_value_to_python(value, target_type: type): - - if isinstance(value, int) and target_type == datetime: - return datetime.fromtimestamp(value) - - elif isinstance(value, str) and ( - type(target_type) == typing._GenericAlias or issubclass(target_type, Model)): - - json_dict = json.loads(value or '{}') - swaggered_value = _deserialize(json_dict, target_type) - return swaggered_value - - else: - return value - - -def _convert_attr_name_to_col_name(swagger_attr_name: str): - - return attribute_name_to_column_name.get(swagger_attr_name) \ - or inflection.camelize(swagger_attr_name) - - -def _convert_col_name_to_attr_name(mysql_column_name: str): - - return column_name_to_attribute_name.get(mysql_column_name) \ - or inflection.underscore(mysql_column_name) - - -def _get_table_name(swagger_object_or_class) -> str: - - if isinstance(swagger_object_or_class, Model): - swagger_class = swagger_object_or_class.__class__ - else: - swagger_class = swagger_object_or_class - - table_name = inflection.underscore(swagger_class.__name__.replace("Api", "")) - - if not table_name.endswith("_extended"): - return table_name + "s" - else: - return table_name.replace("_extended", "s_extended") - - -############################################################################## -# general helper methods -############################################################################## - -def generate_id(name: str = None, length: int = 36) -> str: - if name: - # return name.lower().replace(" ", "-").replace("---", "-").replace("-–-", "–") - return sanitize_k8s_name(name) - else: - # return ''.join([choice(ascii_letters + digits + '-') for n in range(length)]) - return ''.join([choice(hexdigits) for n in range(length)]).lower() - - -############################################################################## -# helper methods to create MySQL tables -############################################################################## - -def _get_column_type(swagger_field_name, swagger_field_type, swagger_class) -> str: - return custom_col_types.get(swagger_class.__name__, {}).get(swagger_field_name) or \ - _get_mysql_type_declaration(swagger_field_type) - - -def _get_mysql_type_declaration(python_class_or_type) -> str: - - if python_class_or_type in type_map: - return type_map[python_class_or_type] - - # elif type(python_class_or_type) == typing._GenericAlias: - elif str(python_class_or_type).startswith("typing."): # TODO - type_name = getattr(python_class_or_type, "_name", "").lower() - clazz = eval(type_name) - if clazz in type_map: - return type_map[clazz] - - elif isinstance(python_class_or_type, Model) or issubclass(python_class_or_type, Model): - clazz = Model - if clazz in type_map: - return type_map[clazz] - - raise ValueError(f"Cannot find MySQL data type for Python type {python_class_or_type}") - - -def _get_mysql_default_value_declaration(default_value): - - if default_value: - raise ValueError("DEFAULT value not implemented for MySQL CREATE TABLE statement," - f" default: '{default_value}'") - - # TODO: generate MySQL default value declaration - return default_value or "NOT NULL" - - -def _get_create_table_statement(swagger_class) -> str: - - table_name = _get_table_name(swagger_class) - - create_table_stmt = [f"CREATE TABLE IF NOT EXISTS `{table_name}` ("] - - # swagger_object.swagger_types dictionary maintains insertion order since Python 3.6 - # but does not show defaults, use inspection to get argument list from constructor - sig = inspect.signature(swagger_class.__init__) - - for _, p in sig.parameters.items(): - if p.name == "self": - continue - col_name = _convert_attr_name_to_col_name(p.name) - col_type = _get_column_type(p.name, p.annotation, swagger_class) - col_default = _get_mysql_default_value_declaration(p.default) - - # TODO: find more generic way to allow empty JSON column values, not NOT NULL - if col_type == "json": - col_default = "" - - create_table_stmt.append(f" `{col_name}` {col_type} {col_default},") - - if "id" in sig.parameters.keys(): - id_field_name = _convert_attr_name_to_col_name("id") - - create_table_stmt.append(f" PRIMARY KEY (`{id_field_name}`)") - - else: - raise ValueError("CREATE TABLE statement requires PRIMARY KEY field. Expected 'id'") - - if "name" in sig.parameters.keys(): - name_field = _convert_attr_name_to_col_name("name") - - create_table_stmt.append(f", UNIQUE KEY `{name_field}` (`{name_field}`)") - - create_table_stmt.append(") ENGINE=InnoDB DEFAULT CHARSET=latin1") - - create_table_stmt = "\n".join(create_table_stmt) - - print(create_table_stmt) - - return create_table_stmt - - -def _get_create_view_statement(swagger_class) -> str: - - view_name = _get_table_name(swagger_class) - base_table_name = view_name.replace("_extended", "") - extension_table_name = view_name.replace("s_extended", "_extensions") - - extension_swagger_class = eval(swagger_class.__name__.replace("Extended", "Extension")) - - ext_sig = inspect.signature(extension_swagger_class.__init__) - - b_id_col_name = _convert_attr_name_to_col_name("id") - e_id_col_name = _convert_attr_name_to_col_name("id") - - e_non_id_col_names = [_convert_attr_name_to_col_name(p.name) - for _, p in ext_sig.parameters.items() - if p.name not in ["id", "self"]] - - e_non_id_col_list = ", ".join([f"e.`{cn}`" for cn in e_non_id_col_names]) - - create_view_stmt = f""" - CREATE VIEW `{view_name}` AS - SELECT b.*, {e_non_id_col_list} - FROM `{base_table_name}` AS b - LEFT OUTER JOIN `{extension_table_name}` AS e - ON b.`{b_id_col_name}`=e.`{e_id_col_name}` - """ - - print(create_view_stmt) - - return create_view_stmt - - -############################################################################## -# helper methods to create SQL (query) statement -############################################################################## - -def _get_where_clause(swagger_class, filter_dict=dict()) -> str: - - if not filter_dict: - return None - - sig = inspect.signature(swagger_class.__init__) - - predicates = [] - - for attribute_name, attribute_value in filter_dict.items(): - - if attribute_name not in sig.parameters.keys(): - raise ValueError(f"{swagger_class} does not have an '{attribute_name}' attribute.") - - attribute_type = sig.parameters[attribute_name].annotation - column_type = _get_column_type(attribute_name, attribute_type, swagger_class) - column_name = _convert_attr_name_to_col_name(attribute_name) - - if column_type == "json" and type(attribute_value) == dict: - for key, value in attribute_value.items(): - predicates.append(f"json_contains(json_extract({column_name}, '$.{key}'), '{json.dumps(value)}')") - - # where json_contains(json_extract(FilterCategories, '$.platform'), '"kubernetes"') - # where json_contains(json_extract(FilterCategories, '$.platform'), '["kubernetes", "kfserving"]') - # where json_contains(json_extract(FilterCategories, '$.language'), '"python"') - - # Note, there various ways to implement JSON search predicates: - # https://www.sitepoint.com/use-json-data-fields-mysql-databases/ - # i.e. - # FilterCategories={ - # "domain": "image-recognition", - # "language": "python", - # "platform": ["kubernetes", "kfserving"] - # } - # select uuid, name, FilterCategories from models - # where FilterCategories like '%kubernetes%' - # where json_extract(FilterCategories, '$.platform') like '%kubernetes%' - # where json_contains(json_extract(FilterCategories, '$.language'), '"python"') - # where json_contains(json_extract(FilterCategories, '$.platform'), '"kubernetes"') - # where json_contains(json_extract(FilterCategories, '$.platform'), '["kubernetes", "kfserving"]') - # where json_contains(json_extract(FilterCategories, '$.language'), '"python"') - # where json_extract(FilterCategories, '$.language') = 'python' - # where json_extract(FilterCategories, '$.language') like '"python"' - # where json_extract(FilterCategories, '$.language') like '%python%' - # where json_extract(FilterCategories, '$.platform') like '%kubernetes%' - # where FilterCategories -> "$.platform" like '%kubernetes%'; - # where FilterCategories -> "$.language" like '%python%'; - # where FilterCategories -> "$.language" = 'python'; - - else: # CAUTION: assuming everything else is string type - - column_value = _convert_value_to_mysql(attribute_value, attribute_type, quote_str=True) - - # if type(column_value) == str: # quote_str=True - # column_value = f"'{column_value}'" - - predicates.append(f"`{column_name}` LIKE {column_value}") - - if predicates: - - # TODO: defend against SQL injection attack - return "WHERE " + " AND ".join(predicates) - - return None - - -def _get_orderby_clause(swagger_class, column_name_and_sort_order) -> str: - - if not column_name_and_sort_order: - return None - - sig = inspect.signature(swagger_class.__init__) - - attr_name, sort_order = (column_name_and_sort_order.split(" ") + ["asc"])[:2] - - if attr_name not in sig.parameters.keys(): - raise ValueError(f"{swagger_class} does not have an '{attr_name}' attribute.") - - column_name = _convert_attr_name_to_col_name(attr_name) - - return f"ORDER BY `{column_name}` {sort_order}" - - -def _get_limit_clause(count, offset): - - if offset and count: - return f"LIMIT {offset}, {count}" - - if count: - return f"LIMIT {count}" - - return None - - -############################################################################## -# methods to connect to MySQL and execute db operations -############################################################################## - -def _get_connection(timeout: int = 10): - - return connect(host=_host, port=_port, user=_user, database=_database, connection_timeout=timeout) - - -def _verify_or_create_table(table_name: str, swagger_class_or_object, validate_schema=True) -> bool: - - if table_name not in existing_tables: - - if isinstance(swagger_class_or_object, Model): - swagger_class = type(swagger_class_or_object) - else: - swagger_class = swagger_class_or_object - - table_exists = False - - if validate_schema: - table_exists = _validate_schema(table_name, swagger_class) - existing_tables[table_name] = table_exists - - if not table_exists: - if swagger_class.__name__.endswith("Extended"): - # first, create the table that is being "extended" (only required if KFP did not create it) - base_swagger_class = eval(swagger_class.__name__.replace("Extended", "")) - base_table_name = _get_table_name(base_swagger_class) - create_table_stmt = _get_create_table_statement(base_swagger_class) - base_table_created = _run_create_table_statement(base_table_name, create_table_stmt) - existing_tables[base_table_name] = base_table_created - - # second, create the table with the additional columns - extension_swagger_class = eval(swagger_class.__name__.replace("Extended", "Extension")) - extension_table_name = _get_table_name(extension_swagger_class) - create_table_stmt = _get_create_table_statement(extension_swagger_class) - ext_table_created = _run_create_table_statement(extension_table_name, create_table_stmt) - existing_tables[extension_table_name] = ext_table_created - - # third, create the table-view that extends the base table with the additional columns from the ext table - create_view_stmt = _get_create_view_statement(swagger_class) - view_created = _run_create_table_statement(table_name, create_view_stmt) - existing_tables[table_name] = view_created - else: - create_table_stmt = _get_create_table_statement(swagger_class) - table_created = _run_create_table_statement(table_name, create_table_stmt) - existing_tables[table_name] = table_created - - return True - - -def _validate_schema(table_name: str, swagger_class): - - # swagger_object.swagger_types dictionary maintains insertion order since Python 3.6 - # but does not show defaults, use inspection to get argument list from constructor - sig = inspect.signature(swagger_class.__init__) - - swagger_columns_w_type = [] - - for _, p in sig.parameters.items(): - if p.name == "self": - continue - col_name = _convert_attr_name_to_col_name(p.name) - col_type = _get_column_type(p.name, p.annotation, swagger_class) - - swagger_columns_w_type.append((col_name, col_type)) - - query = f"SELECT COLUMN_NAME, SUBSTR(COLUMN_TYPE,1,64) as COLUMN_TYPE " \ - f" FROM INFORMATION_SCHEMA.COLUMNS " \ - f" WHERE TABLE_SCHEMA = '{_database}' AND TABLE_NAME = '{table_name}'" - - cnx = _get_connection() - cursor = cnx.cursor(buffered=True) - - table_columns_w_type = [] - - try: - cursor.execute(query) - for column_name, column_type in cursor: - table_columns_w_type.append((column_name, column_type)) - - except Error as err: - print(err.msg) - raise err - - finally: - cursor.close() - cnx.close() - - if table_columns_w_type and set(table_columns_w_type) != set(swagger_columns_w_type): - - if isinstance(swagger_class, Model): - swagger_class = type(swagger_class) - - cols_found = "\n - ".join([f"'{n}' {t}" for n, t in table_columns_w_type]) - cols_expect = "\n - ".join([f"'{n}' {t}" for n, t in swagger_columns_w_type]) - - err_msg = f"The MySQL table '{_database}.{table_name}' does not match Swagger" \ - f" class '{swagger_class.__name__}'.\n" \ - f" Found table with columns:\n" \ - f" - {cols_found}.\n" \ - f" Expected table with columns:\n" \ - f" - {cols_expect}.\n" \ - f" Delete and recreate the table by calling the API endpoint 'DELETE /{table_name}/*'" - - raise ApiError(err_msg) - - return len(table_columns_w_type) > 0 - - -def _run_create_table_statement(table_name, table_description: tuple) -> bool: - - cnx = _get_connection() - cnx.autocommit = True - cursor = cnx.cursor(buffered=True) - - try: - print(f"Creating table '{table_name}': ", end='') - cursor.execute(table_description) - cnx.commit() - print("OK") - - except Error as err: - - if err.errno == errorcode.ER_TABLE_EXISTS_ERROR: - print("already exists.") - else: - print(err.msg) - raise err - - finally: - cursor.close() - cnx.close() - - return True - - -############################################################################## -# public methods to store, load, delete data in a MySQL database -############################################################################## - -# _host = "123.34.13.12" - -def health_check(): - cnx = _get_connection(timeout=1) - cnx.connect() - cnx.disconnect() - cnx.close() - return True - - -def num_rows(swagger_class: type) -> int: - - table_name = _get_table_name(swagger_class) - - _verify_or_create_table(table_name, swagger_class) - - query = f"SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES " \ - f"WHERE TABLE_SCHEMA = '{_database}' AND TABLE_NAME = '{table_name}'" - - cnx = _get_connection() - cursor = cnx.cursor() - - try: - cursor.execute(query) - num_records, = cursor.fetchone() - - except Error as err: - print(err.msg) - raise err - - finally: - cursor.close() - cnx.close() - - return num_records - - -def store_data(swagger_object: Model) -> str: - - table_name = _get_table_name(swagger_object) - - _verify_or_create_table(table_name, swagger_object) - - swagger_fields = swagger_object.to_dict().keys() - - # TODO: remove generate_id() calls in controller_impl methods, do it here - if "id" in swagger_fields and not swagger_object.id: - swagger_object.id = generate_id(swagger_object.name if "name" in swagger_fields else None) - - # TODO: remove creating a new data in controller_impl methods, do it here - if "created_at" in swagger_fields and not swagger_object.created_at: - swagger_object.created_at = datetime.now() - - column_names, column_values = [], [] - for field_name in swagger_fields: - python_value = getattr(swagger_object, field_name) - python_type = swagger_object.swagger_types[field_name] - mysql_type = _get_column_type(field_name, python_type, swagger_object.__class__) - - col_name = _convert_attr_name_to_col_name(field_name) - col_value = _convert_value_to_mysql(python_value, python_type, mysql_type) - - column_names.append(col_name) - column_values.append(col_value) - - column_names_str = ", ".join(column_names) - values_list_str = ('%s,' * len(column_values)).rstrip(',') - - insert_stmt = (f"INSERT INTO {table_name} " - f"({column_names_str}) " - f"VALUES ({values_list_str})") - - cnx = _get_connection() - cnx.autocommit = True - cursor = cnx.cursor() - - try: - cursor.execute(insert_stmt, tuple(column_values)) - cnx.commit() - - except IntegrityError as e: - cnx.rollback() - raise ApiError(e.msg, 409) - - except Error as err: - cnx.rollback() - print(err.msg) - print(insert_stmt) - print(column_values) - raise err - - finally: - cursor.close() - cnx.close() - - return swagger_object.id - - -def update_multiple(swagger_class: type, ids: List[str], attribute_name: str, value): - - table_name = _get_table_name(swagger_class) - - _verify_or_create_table(table_name, swagger_class, False) - - sig = inspect.signature(swagger_class.__init__) - - if attribute_name not in sig.parameters.keys(): - raise ValueError(f"{swagger_class} does not have an attribute with name '{attribute_name}'.") - - if ids and "id" not in sig.parameters.keys(): - raise ValueError(f"{swagger_class} does not have an 'id' attribute.") - - update_column_name = _convert_attr_name_to_col_name(attribute_name) - update_column_value = _convert_value_to_mysql(value, sig.parameters.get(attribute_name).annotation, quote_str=False) - - # if type(update_column_value) == str: - # update_column_value = f"'{update_column_value}'" - - if not ids or ids[0] == "*": - # if we get an empty list, we assume the update is for all - update_stmt = f"UPDATE `{table_name}` \ - SET `{update_column_name}` = %s" - else: - id_column_name = _convert_attr_name_to_col_name("id") - str_of_quoted_ids = ",".join([f"'{id}'" for id in ids]) - - update_stmt = f"UPDATE `{table_name}` \ - SET `{update_column_name}` = %s \ - WHERE `{id_column_name}` in ({str_of_quoted_ids})" - - cnx = _get_connection() - cnx.autocommit = True - cursor = cnx.cursor() - - try: - cursor.execute(update_stmt, params=[update_column_value]) - cnx.commit() - - except Error as err: - cnx.rollback() - print(err.msg) - print(update_stmt) - raise err - - finally: - cursor.close() - cnx.close() - - -def delete_data(swagger_class: type, id: str) -> bool: - - table_name = _get_table_name(swagger_class) - - if id != "*": - # don't create tables if we will delete it a few lines later - _verify_or_create_table(table_name, swagger_class, False) - - sig = inspect.signature(swagger_class.__init__) - - if not id: - raise ValueError(f"Must specify 'id' column value to delete row from table '{table_name}'") - - elif "id" not in sig.parameters.keys(): - raise ValueError(f"{swagger_class} does not have an 'id' attribute.") - - elif id == "*": - # until we have a proper schema migration, use this opportunity to force recreating of the table later - if table_name.endswith("extended"): - sql = f"DROP VIEW IF EXISTS `{table_name}`" - elif table_name in ["pipelines", "pipeline_versions"]: - sql = f"DELETE FROM `{table_name}`" - else: - sql = f"DROP TABLE IF EXISTS `{table_name}`" - - if sql.startswith("DROP ") and table_name in existing_tables: - existing_tables.pop(table_name) - - else: - column_name = _convert_attr_name_to_col_name("id") - column_value = _convert_value_to_mysql(id, str, quote_str=True) - sql = f"DELETE FROM `{table_name}` WHERE `{column_name}` = {column_value}" - - cnx = _get_connection() - cursor = cnx.cursor() - - try: - cursor.execute(sql) - cnx.commit() - - except IntegrityError as e: - cnx.rollback() - return e.msg - - except Error as err: - cnx.rollback() - print(err.msg) - raise err - - finally: - cursor.close() - cnx.close() - - return True # TODO: determine return value - - -def load_data(swagger_class: type, filter_dict: dict = None, sort_by: str = None, count: int = 100, offset: int = 0) -> [Model]: - - table_name = _get_table_name(swagger_class) - - _verify_or_create_table(table_name, swagger_class) - - sig = inspect.signature(swagger_class.__init__) - - where_clause = _get_where_clause(swagger_class, filter_dict) or "" - orderby_clause = _get_orderby_clause(swagger_class, sort_by) or "" - limit_clause = _get_limit_clause(count, offset) or "" - - query = f"SELECT * FROM {table_name} {where_clause} {orderby_clause} {limit_clause}" - - cnx = _get_connection() - cursor = cnx.cursor(buffered=True, dictionary=False) - - swagger_objects = [] - - try: - cursor.execute(query) - - swagger_attr_names = [_convert_col_name_to_attr_name(c) for c in cursor.column_names] - - assert set(swagger_attr_names) <= set(sig.parameters.keys()), \ - f"Mismatch between database schema and API spec for {table_name}. " \ - f"Expected columns: {[_convert_attr_name_to_col_name(k) for k in sig.parameters.keys() if k != 'self']}. " \ - f"Database columns: {cursor.column_names}" - - swagger_attr_types = [sig.parameters.get(a).annotation for a in swagger_attr_names] - - for row_values in cursor: - value_type_tuples = zip(list(row_values), swagger_attr_types) - swagger_attr_values = [_convert_value_to_python(v, t) for v, t in value_type_tuples] - swagger_attr_dict = dict(zip(swagger_attr_names, swagger_attr_values)) - swagger_object = swagger_class(**swagger_attr_dict) - - swagger_objects.append(swagger_object) - - except Error as err: - print(err.msg) - raise err - - finally: - cursor.close() - cnx.close() - - return swagger_objects diff --git a/api/server/swagger_server/encoder.py b/api/server/swagger_server/encoder.py deleted file mode 100644 index a5d1d7a7..00000000 --- a/api/server/swagger_server/encoder.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -from connexion.apps.flask_app import FlaskJSONEncoder -import six - -from swagger_server.models.base_model_ import Model - - -class JSONEncoder(FlaskJSONEncoder): - include_nulls = False - - def default(self, o): - if isinstance(o, Model): - dikt = {} - for attr, _ in six.iteritems(o.swagger_types): - value = getattr(o, attr) - if value is None and not self.include_nulls: - continue - attr = o.attribute_map[attr] - dikt[attr] = value - return dikt - return FlaskJSONEncoder.default(self, o) diff --git a/api/server/swagger_server/gateways/__init__.py b/api/server/swagger_server/gateways/__init__.py deleted file mode 100644 index 088cda17..00000000 --- a/api/server/swagger_server/gateways/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 diff --git a/api/server/swagger_server/gateways/kfserving_client.py b/api/server/swagger_server/gateways/kfserving_client.py deleted file mode 100644 index 0ff51efc..00000000 --- a/api/server/swagger_server/gateways/kfserving_client.py +++ /dev/null @@ -1,83 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import yaml -from kubernetes import client, config - - -def get_all_services(name=None, namespace=None, group=None, version=None, plural=None): - - config.load_incluster_config() - api = client.CustomObjectsApi() - - if not namespace: - namespace = 'default' - - if name is None: - resource = api.list_namespaced_custom_object( - group=group, - version=version, - namespace=namespace, - plural=plural, - ) - else: - resource = api.get_namespaced_custom_object( - group=group, - version=version, - namespace=namespace, - name=name, - plural=plural, - ) - return resource - - -def post_service(inferenceservice=None, namespace=None, group=None, version=None, plural=None): - - config.load_incluster_config() - api = client.CustomObjectsApi() - - service_dict = inferenceservice.to_dict() - # Get resource information from the dict - version_split = service_dict['apiVersion'].split("/") - group = version_split[0] - version = version_split[1] - plural = service_dict['kind'].lower() + "s" - if not namespace: - namespace = service_dict['metadata'].get('namespace', 'default') - - # create the resource - ns_obj = api.create_namespaced_custom_object( - group=group, - version=version, - namespace=namespace, - plural=plural, - body=service_dict, - ) - return ns_obj - - -def from_client_upload_service(upload_file=None, namespace=None, group=None, version=None, plural=None): - - config.load_incluster_config() - api = client.CustomObjectsApi() - - yaml_object = yaml.safe_load(upload_file) - # Get resource information from the yaml - name = yaml_object['metadata']['name'] - version_split = yaml_object['apiVersion'].split("/") - group = version_split[0] - version = version_split[1] - plural = yaml_object['kind'].lower() + "s" - if not namespace: - namespace = yaml_object['metadata'].get('namespace', 'default') - - # create the resource - ns_obj = api.create_namespaced_custom_object( - group=group, - version=version, - namespace=namespace, - plural=plural, - body=yaml_object, - ) - return ns_obj \ No newline at end of file diff --git a/api/server/swagger_server/gateways/kubeflow_pipeline_service.py b/api/server/swagger_server/gateways/kubeflow_pipeline_service.py deleted file mode 100644 index 93b3552a..00000000 --- a/api/server/swagger_server/gateways/kubeflow_pipeline_service.py +++ /dev/null @@ -1,679 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import autopep8 -import json -import os -import re -import yaml - -from datetime import datetime - -from kfp import Client as KfpClient -from kfp.components._naming import _sanitize_python_function_name as sanitize - -from kfp_server_api import ApiRun -from kfp_server_api import ApiPipeline as KfpPipeline -from kfp_server_api.rest import ApiException as PipelineApiException - -from os import environ as env -from os.path import abspath, join, dirname -from string import Template - -from swagger_server.data_access.mysql_client import generate_id -from swagger_server.data_access.minio_client import get_object_url,\ - create_tarfile, store_file, _host as minio_host, _port as minio_port,\ - _access_key as minio_access_key, _secret_key as minio_secret_key,\ - retrieve_file_content -from swagger_server.models import ApiDataset -from swagger_server.models.api_component import ApiComponent -from swagger_server.models.api_model import ApiModel -from swagger_server.models.api_notebook import ApiNotebook -from swagger_server.models.api_parameter import ApiParameter -from swagger_server.models.api_pipeline import ApiPipeline -from swagger_server.models.api_pipeline_custom import ApiPipelineCustom -from swagger_server.util import ApiError - -from time import sleep - - -CODE_TEMPLATE_DIR = abspath(join(dirname(__file__), "..", "code_templates")) - -_namespace = env.get("POD_NAMESPACE", "kubeflow") -_host = env.get("ML_PIPELINE_SERVICE_HOST", "ml-pipeline.%s.svc.cluster.local" % _namespace) -_port = env.get("ML_PIPELINE_SERVICE_PORT", "8888") -_api_base_path = env.get("ML_PIPELINE_SERVICE_API_BASE_PATH", "") -_pipeline_service_url = env.get("ML_PIPELINE_SERVICE_URL", f"{_host}:{_port}/{_api_base_path}".rstrip("/")) - - -def upload_pipeline_to_kfp(uploadfile: str, name: str = None, description: str = None) -> ApiPipeline: - - kfp_client = KfpClient() - - try: - kfp_pipeline: KfpPipeline = kfp_client.upload_pipeline(pipeline_package_path=uploadfile, - pipeline_name=name, - description=description) - api_pipeline: ApiPipeline = ApiPipeline.from_dict(kfp_pipeline.to_dict()) - api_pipeline.status = kfp_pipeline.error - return api_pipeline - - except PipelineApiException as e: - kfp_host = _pipeline_service_url - - print(f"Error calling PipelineServiceApi ({kfp_host}) -> upload_pipeline(name='{name}'): {e}") - - error_body = json.loads(e.body) or {"error_message": str(e)} - error_msg = error_body["error_message"] - status_code = 409 if "already exist. Please specify a new name" in error_msg else e.status - - raise ApiError(error_msg, status_code) - - return None - - -def delete_kfp_pipeline(pipeline_id: str): - - api_instance = KfpClient() - - try: - api_instance.delete_pipeline(pipeline_id) - - except AttributeError as e: - # ignore KFP AttributeError. It is a bug in the Swagger-generated client code for Kubeflow Pipelines - if not str(e) == "module 'kfp_pipeline.models' has no attribute 'ERRORUNKNOWN'": - raise e - - except PipelineApiException as e: - kfp_host = api_instance.api_client.configuration.host - print(f"Exception when calling PipelineServiceApi ({kfp_host}) -> delete_pipeline: %s\n" % e) - raise ApiError(message=f"{e.body}\nKFP URL: {kfp_host}", http_status_code=e.status or 422) - - -def quote_string_value(value): - if type(value) == str: - escaped_str = value.replace("'", "\\'") - return f"'{escaped_str}'" - else: - return value - - -def generate_method_arg_from_parameter(parameter): - - param_name = sanitize(parameter.name) - - if parameter.value or parameter.default: - value = quote_string_value(parameter.value or parameter.default) - arg = f"{param_name}={value}" - elif parameter.value == '' or parameter.default == '': # TODO: should empty string != None ? - arg = f"{param_name}=''" - else: - arg = param_name - - return arg - - -def generate_pipeline_method_args(parameters: [ApiParameter]) -> str: - args = [] - - for p in parameters: - arg = generate_method_arg_from_parameter(p) - args.append(arg) - - return ",\n ".join(args) - - -def generate_component_run_script(component: ApiComponent, component_template_url, run_parameters=dict(), - run_name: str = None): - - name = component.name + " " + generate_id(length=4) - description = component.description.strip() - - pipeline_method_args = generate_pipeline_method_args(component.parameters) - - parameter_names = ",".join([sanitize(p.name) for p in component.parameters]) - - parameter_dict = json.dumps({sanitize(p.name): run_parameters.get(p.name) or p.default or "" - for p in component.parameters}, - indent=4).replace('"', "'") - - pipeline_server = "" if "POD_NAMESPACE" in os.environ else f"'{_pipeline_service_url}'" - - run_name = (run_name or "").replace("'", "\"") or component.name - - substitutions = dict(locals()) - - template_file = f"run_component.TEMPLATE.py" - - with open(join(CODE_TEMPLATE_DIR, template_file), 'r') as f: - template_raw = f.read() - - template_rendered = Template(template_raw).substitute(substitutions) - - run_script = autopep8.fix_code(template_rendered, options={"aggressive": 2}) - - return run_script - - -def generate_custom_pipeline_function_body(custom_pipeline: ApiPipelineCustom, hide_secrets=True): - - function_body = """ - from kfp import components - """ - - component_template_raw = """ - ${comp_name} = components.load_component_from_url('${template_url}') - ${op_name} = ${comp_name}(${component_args}) - """ - - op_dependency_template_raw = """ - ${op_name}.after(${required_op_name}) - """ - - for task in custom_pipeline.dag.tasks: - parameters = [] - - if task.artifact_type == "notebook": - component_s3_prefix = f"components/jupyter/" - notebook_url = get_object_url(bucket_name="mlpipeline", - prefix=f"notebooks/{task.artifact_id}/", - file_extensions=[".ipynb"]) - - if not notebook_url: - raise ApiError(f"Could not find notebook '{task.artifact_id}'") - - task_parameters = list(task.arguments.parameters) if task.arguments and task.arguments.parameters else [] - - for p in task_parameters: - if type(p.value) == str and p.value.startswith("{{inputs.parameters."): - raise ApiError("Referencing '{{inputs.parameters.*}}' is not supported for notebook parameter" - f" values: {task.to_dict()}", 422) - - notebook_parameters = {p.name: p.value or p.default for p in task_parameters} - notebook_parameters_str = json.dumps(notebook_parameters) if notebook_parameters else "" - - jupyter_component_parameters = { - "notebook_url": notebook_url, - "notebook_params": notebook_parameters_str, - "api_token": "", - "endpoint_url": "", - "bucket_name": "", - "object_name": "", - "access_key": "", - "secret_access_key": "" - } - - if not hide_secrets: - output_folder = f"notebooks/{task.artifact_id}/runs/{datetime.now().strftime('%Y%m%d-%H%M%S')}" - notebook_file_name = notebook_url.split("/")[-1] - output_file_name = notebook_file_name.replace(r'.ipynb', '_out.ipynb') - output_file_path = f"{output_folder}/{output_file_name}" - output_bucket = "mlpipeline" - - jupyter_component_parameters.update({ - "endpoint_url": "minio-service:9000", # f"{minio_host}:{minio_port}", - "bucket_name": output_bucket, - "object_name": output_file_path, - "access_key": minio_access_key, - "secret_access_key": minio_secret_key - }) - - for name, value in jupyter_component_parameters.items(): - parameters.append(f"{name} = '{value}'") - - elif task.artifact_type == "component": - component_s3_prefix = f"components/{task.artifact_id}/" - - # replace parameter values that reference pipeline input parameters {{inputs.parameters.parameter_name}} - task_parameters = list(task.arguments.parameters) if task.arguments and task.arguments.parameters else [] - - missing_parameter_values = [p.name for p in task_parameters - if not p.value and not p.default and p.description \ - and p.description.title().startswith("Required")] - - if missing_parameter_values: - raise ApiError(f"Missing required task parameters {missing_parameter_values}", 422) - - for p in task_parameters: - - if type(p.value) == str and p.value.startswith("{{inputs.parameters."): - match = re.match(r"{{inputs.parameters.(?P\w+)}}", p.value) - - if not match: - raise ApiError(f"Cannot match pipeline input.parameter '{p.value}'", 422) - - pipeline_param_ref = match.groupdict().get("pipeline_parameter_name") - parameters.append(f"{p.name} = {pipeline_param_ref}") - - else: - arg = generate_method_arg_from_parameter(p) - parameters.append(arg) - - else: - raise ApiError(f"Unknown or unsupported artifact_type '{task.artifact_type}':\n'{task}'", 422) - - comp_name = "comp_" + re.sub(r"\W+", "_", task.name, flags=re.ASCII).lower() - op_name = "op_" + re.sub(r"\W+", "_", task.name, flags=re.ASCII).lower() - - template_url = get_object_url(bucket_name="mlpipeline", - prefix=component_s3_prefix, - file_extensions=[".yaml", ".yml"]) - - if not template_url: - raise ApiError(f"Could not find component template '{component_s3_prefix}'") - - substitutions = { - "comp_name": comp_name, - "op_name": op_name, - "template_url": template_url, - "component_args": ", ".join(parameters) - } - template_rendered = Template(component_template_raw).substitute(substitutions) - function_body += template_rendered - - for task in custom_pipeline.dag.tasks: - for required_task_name in task.dependencies or []: - substitutions = { - "op_name": "op_" + re.sub(r"\W+", "_", task.name, flags=re.ASCII).lower(), - "required_op_name": "op_" + re.sub(r"\W+", "_", required_task_name, flags=re.ASCII).lower() - } - template_rendered = Template(op_dependency_template_raw).substitute(substitutions) - function_body += template_rendered - - return function_body - - -def generate_custom_pipeline_run_script(custom_pipeline: ApiPipelineCustom, run_parameters=dict(), - run_name: str = None, hide_secrets=True): - - name = custom_pipeline.name - description = (custom_pipeline.description or "").strip() - - pipeline_method_args = generate_pipeline_method_args(custom_pipeline.inputs.parameters) - - parameter_dict = json.dumps({p.name: run_parameters.get(p.name) or p.value or p.default # or "" - for p in custom_pipeline.inputs.parameters}, - indent=4).replace(': null', ': None') - - pipeline_function_body = generate_custom_pipeline_function_body(custom_pipeline, hide_secrets) - - pipeline_server = "" if "POD_NAMESPACE" in os.environ else f"'{_pipeline_service_url}'" - - run_name = run_name or custom_pipeline.name - - substitutions = dict(locals()) - - template_file = f"run_pipeline.TEMPLATE.py" - - with open(join(CODE_TEMPLATE_DIR, template_file), 'r') as f: - template_raw = f.read() - - template_rendered = Template(template_raw).substitute(substitutions) - - run_script = autopep8.fix_code(template_rendered, options={"aggressive": 2}) - - return run_script - - -def generate_dataset_run_script(dataset: ApiDataset, dataset_template_url, run_parameters=dict(), - run_name: str = None, fail_on_missing_prereqs=False): - - name = f"{dataset.name} ({generate_id(length=4)})" - description = dataset.description.strip().replace("'", "\\'") - - # TODO: some of the parameters, template URLs should move out of here - - # dataset_parameters = dataset.parameters - # TODO: ApiParameters should not be defined here - dataset_parameters = [ApiParameter(name="action", default="create"), - ApiParameter(name="namespace", default=_namespace)] - - pipeline_method_args = generate_pipeline_method_args(dataset_parameters) - - parameter_names = ",".join([p.name for p in dataset_parameters]) - - # TODO: the action parameter is required by DLF-to-PVC op, so it should not be dynamically generated here - parameter_dict = { - "action": "create", - "namespace": run_parameters.get("namespace", _namespace) - } - - # see component name at https://github.com/machine-learning-exchange/mlx/blob/main/components/component-samples/dax-to-dlf/component.yaml#L1 - dax_to_dlf_component_id = generate_id(name="Generate Dataset Metadata") - - # see component name at https://github.com/machine-learning-exchange/mlx/blob/main/components/component-samples/dlf/component.yaml#L1 - dlf_to_pvc_component_id = generate_id(name="Create Dataset Volume") - - dax_to_dlf_component_url = get_object_url(bucket_name="mlpipeline", - prefix=f"components/{dax_to_dlf_component_id}/", - file_extensions=[".yaml"]) - - dlf_to_pvc_component_url = get_object_url(bucket_name="mlpipeline", - prefix=f"components/{dlf_to_pvc_component_id}/", - file_extensions=[".yaml"]) - - if fail_on_missing_prereqs: - - if not dax_to_dlf_component_url: - raise ApiError(f"Missing required component '{dax_to_dlf_component_id}'") - - if not dlf_to_pvc_component_url: - raise ApiError(f"Missing required component '{dlf_to_pvc_component_id}'") - - namespace = run_parameters.get("namespace", _namespace) - - pipeline_server = "" if "POD_NAMESPACE" in os.environ else f"'{_pipeline_service_url}'" - - run_name = (run_name or "").replace("'", "\"") or dataset.name - - substitutions = dict(locals()) - - template_file = f"run_dataset.TEMPLATE.py" - - with open(join(CODE_TEMPLATE_DIR, template_file), 'r') as f: - template_raw = f.read() - - template_rendered = Template(template_raw).substitute(substitutions) - - run_script = autopep8.fix_code(template_rendered, options={"aggressive": 2}) - - return run_script - - -def generate_model_run_script(model: ApiModel, pipeline_stage: str, execution_platform: str, - run_name: str = None, parameters=dict(), hide_secrets=True): - - if pipeline_stage == "serve" and model.servable_credentials_required or \ - pipeline_stage == "train" and model.trainable_credentials_required: - - template_file = f"{pipeline_stage}_{execution_platform.lower()}_w_credentials.TEMPLATE.py" - else: - template_file = f"{pipeline_stage}_{execution_platform.lower()}.TEMPLATE.py" - - with open(join(CODE_TEMPLATE_DIR, template_file), 'r') as f: - template_raw = f.read() - - pipeline_server = "" if "POD_NAMESPACE" in os.environ else f"'{_pipeline_service_url}'" - - substitutions = { - "model_identifier": model.id, - "pipeline_server": pipeline_server, - # "model_name": "maintenance-model-pg", # TODO: generate_id(name=model.name), - "run_name": run_name or model.id, - "generated_secret": "" if hide_secrets else f"secret-{generate_id(length=8).lower()}" - } - - model_parameters = [] - - if pipeline_stage == "train": - model_parameters = model.trainable_parameters - elif pipeline_stage == "serve": - model_parameters = model.servable_parameters - - pipeline_method_args = {p.name: p.value or p.default for p in model_parameters} - - substitutions.update(pipeline_method_args) - - substitutions.update(parameters) - - run_script = Template(template_raw).substitute(substitutions) - - return run_script - - -def generate_notebook_run_script(api_notebook: ApiNotebook, - parameters: dict = {}, - run_name: str = None, - hide_secrets: bool = True): - - if "dataset_pvc" in parameters: - template_file = "run_notebook_with_dataset.TEMPLATE.py" - else: - template_file = "run_notebook.TEMPLATE.py" - - with open(join(CODE_TEMPLATE_DIR, template_file), 'r') as f: - template_raw = f.read() - - notebook_file = api_notebook.url.split("/")[-1] - - requirements_url = get_object_url(bucket_name="mlpipeline", - prefix=f"notebooks/{api_notebook.id}/", - file_extensions=[".txt"], - file_name_filter="requirements") - - cos_dependencies_archive_url = get_object_url(bucket_name="mlpipeline", - prefix=f"notebooks/{api_notebook.id}/", - file_extensions=[".tar.gz"], - file_name_filter="elyra-dependencies-archive") - - if not cos_dependencies_archive_url: - - tar, bytes_io = create_tarfile(bucket_name="mlpipeline", - prefix=f"notebooks/{api_notebook.id}/", - file_extensions=[".ipynb"]) - - cos_dependencies_archive_url = store_file(bucket_name="mlpipeline", - prefix=f"notebooks/{api_notebook.id}/", - file_name="elyra-dependencies-archive.tar.gz", - file_content=bytes_io.getvalue()) - - cos_dependencies_archive = cos_dependencies_archive_url.split("/")[-1] - - # TODO: move this into a ApiNotebook.image as opposed to parsing yaml here - yaml_file_content = retrieve_file_content(bucket_name="mlpipeline", - prefix=f"notebooks/{api_notebook.id}/", - file_extensions=[".yaml", ".yml"]) - metadata_yaml = yaml.load(yaml_file_content, Loader=yaml.FullLoader) - - image = metadata_yaml["implementation"]["github"].get("image", "tensorflow/tensorflow:latest") - - # TODO: elyra-ai/kfp-notebook generates output notebook as: "-output.ipynb" - # https://github.com/elyra-ai/kfp-notebook/blob/c8f1298/etc/docker-scripts/bootstrapper.py#L188-L190 - # so here we may consider renaming the generated file with a datetimestamp - # output_folder = f"notebooks/{api_notebook.id}/runs/{datetime.now().strftime('%Y%m%d-%H%M%S')}" - # output_file_name = notebook_file_name.replace(r'.ipynb', '-output.ipynb') - # output_file_path = f"{output_folder}/{output_file_name}" - # output_file_url = f"http://{minio_host}:{minio_port}/mlpipeline/{output_file_path}" - - # TODO: do we really need this url: - # client = TektonClient(${pipeline_server}) - # vs: - # client = TektonClient() - # ... kfp.Client can figure out the in-cluster IP and port automatically - kfp_url = f"'{_pipeline_service_url}'" if "POD_NAMESPACE" not in os.environ else "" - - substitutions = { - "name": api_notebook.name, - "description": api_notebook.description, - "notebook": notebook_file, - "cos_bucket": "mlpipeline", - "cos_directory": f"notebooks/{api_notebook.id}/", - "cos_dependencies_archive": cos_dependencies_archive, - "cos_endpoint": "***", - "cos_username": "***", - "cos_password": "***", - "requirements_url": requirements_url or "", - "image": image, - "pipeline_server": kfp_url, - "run_name": run_name or api_notebook.name - } - - # TODO: make the `dataset_pvc` and `mount_path` parameters part of the Swagger spec? - if "dataset_pvc" in parameters: - substitutions.update({ - "dataset_pvc": parameters["dataset_pvc"], - "mount_path": parameters.get("mount_path", "/tmp/data") - }) - - if not hide_secrets: - substitutions.update({ - "cos_endpoint": f"http://{minio_host}:{minio_port}/minio", - "cos_username": minio_access_key, - "cos_password": minio_secret_key - }) - - run_script = Template(template_raw).substitute(substitutions) - - return run_script - - -def run_component_in_experiment(component: ApiComponent, component_template_url: str, parameters: dict, - run_name: str = None, wait_for_status: bool = False): - - source_code = generate_component_run_script(component, component_template_url, parameters, run_name) - - return run_code_in_experiment(source_code, wait_for_status) - - -def run_custom_pipeline_in_experiment(custom_pipeline: ApiPipelineCustom, run_name: str, parameters: dict, - wait_for_status: bool = False): - try: - source_code = generate_custom_pipeline_run_script(custom_pipeline, parameters, run_name, hide_secrets=False) - - except Exception as e: - # TODO: remove this debug logging for development only - print(f"Error trying to generate code for custom pipeline run '{run_name or custom_pipeline.name}': {e}") - print(custom_pipeline) - print(parameters) - raise e - - try: - run_id = run_code_in_experiment(source_code, wait_for_status) - - except SyntaxError as e: - print(f"SyntaxError trying to run pipeline DSL '{run_name or custom_pipeline.name}': {e}") - print(source_code) - print("Custom pipeline payload:") - print(custom_pipeline) - raise ApiError(f"SyntaxError trying to run pipeline DSL: {e.msg}\n" - f"{source_code}", - 500) - - except Exception as e: - # TODO: remove this debug logging for development only - print(f"Error trying to run custom pipeline code '{run_name or custom_pipeline.name}': {e}") - print(custom_pipeline) - print(source_code) - raise e - - # TODO: remove this debug logging for development only - print("Custom pipeline payload:") - print(custom_pipeline) - print("Pipeline DSL:") - print(source_code) - - return run_id - - -def run_dataset_in_experiment(dataset: ApiDataset, dataset_template_url: str, parameters: dict = {}, - run_name: str = None, wait_for_status: bool = False): - - source_code = generate_dataset_run_script(dataset, dataset_template_url, parameters, run_name, - fail_on_missing_prereqs=True) - - return run_code_in_experiment(source_code, wait_for_status) - - -def run_model_in_experiment(model: ApiModel, pipeline_stage: str, execution_platform: str, run_name: str = None, - parameters: dict = None, wait_for_status: bool = False): - - source_code = generate_model_run_script(model, pipeline_stage, execution_platform.lower(), run_name, parameters, - hide_secrets=False) - - return run_code_in_experiment(source_code, wait_for_status) - - -def run_notebook_in_experiment(notebook: ApiNotebook, parameters: dict, run_name: str, - wait_for_status: bool = False): - - source_code = generate_notebook_run_script(notebook, parameters, run_name, hide_secrets=False) - - return run_code_in_experiment(source_code, wait_for_status) - - -def run_pipeline_in_experiment(api_pipeline: ApiPipeline, parameters: dict = None, run_name: str = None, - namespace: str = None, wait_for_status: bool = False): - try: - client = KfpClient() - # if not namespace: ... client._context_setting['namespace'] and client.get_kfp_healthz().multi_user is True: - experiment = client.create_experiment('PIPELINE_RUNS', namespace=namespace) - run_result = client.run_pipeline(experiment_id=experiment.id, - job_name=run_name or api_pipeline.name, - params=parameters, - pipeline_id=api_pipeline.id) - run_id = run_result.id - - if wait_for_status: - - run_details = wait_for_run_status(client, run_id, 10) - run_status = json.loads(run_details.pipeline_runtime.workflow_manifest)["status"] - - if run_status \ - and run_status.get("phase", "").lower() in ["failed", "error"] \ - and run_status.get("message"): - raise RuntimeError(f"Run {run_id} failed with error: {run_status['message']}") - - return run_id - - except Exception as e: - print(f"Exception trying to run pipeline {api_pipeline.id} '{api_pipeline.name}'" - f" with parameters {parameters}:" - f" %s\n" % e) - raise ApiError(message=f"{e.body}\nKFP URL: {_pipeline_service_url}", http_status_code=e.status or 422) - - return None - - -def run_code_in_experiment(source_code: str, wait_for_status=False) -> str: - - exec_locals = dict() - - try: - exec(source_code, globals(), exec_locals) - - except SyntaxError as e: - print(f"SyntaxError trying to run_code_in_experiment: {e}") - print("\n".join(["{}{:3d}: {}".format(">" if n+1 == e.lineno else " ", n+1, l) - for n, l in enumerate(source_code.splitlines())])) - # raise ApiError(f"SyntaxError trying to run_code_in_experiment: {e.msg}\n" - # f"{source_code}", 500) - # don't reveal internal code template to users - raise e - - run_result: ApiRun = exec_locals.get("run_result") - - run_id = run_result.id - - if wait_for_status: - - client: KfpClient = exec_locals['client'] - run_details = wait_for_run_status(client, run_id, 10) - run_status = json.loads(run_details.pipeline_runtime.workflow_manifest)["status"] - - if run_status \ - and run_status.get("phase", "").lower() in ["failed", "error"] \ - and run_status.get("message"): - - raise RuntimeError(f"Run {run_id} failed with error: {run_status['message']}") - - return run_id - - -def wait_for_run_status(client, run_id, timeout): - - status = None - start_time = datetime.now() - - while status is None: - - run_response = client.get_run(run_id=run_id) - status = run_response.run.status - elapsed_time = (datetime.now() - start_time).seconds - - if elapsed_time > timeout: - break - - sleep(1) - - return run_response diff --git a/api/server/swagger_server/gateways/kubernetes_service.py b/api/server/swagger_server/gateways/kubernetes_service.py deleted file mode 100644 index 80f073bb..00000000 --- a/api/server/swagger_server/gateways/kubernetes_service.py +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import json -import subprocess - -from base64 import b64decode -from os import environ as env -from pprint import pprint -from swagger_server.util import ApiError - - -secret_name_prefix = "mlx-pipeline-creds" - -_namespace = env.get("POD_NAMESPACE", "kubeflow") - - -def create_secret(secret_name: str, secret_contents: dict): - try: - command = ['kubectl', '-n', _namespace, 'create', 'secret', 'generic', secret_name] - for key, value in secret_contents.items(): - if type(value) == dict: - raise ApiError(f"Secret values must not be of type 'dict'") - if type(value) == list: - value = ",".join([str(v) for v in value]) - if type(value) == str and " " in value: - value = f"\"{value}\"" - command.append(f"--from-literal={key}={value or ''}") - output = subprocess.run(command, capture_output=True, check=True, timeout=10) - pprint(output.stdout.decode()) - except Exception as e: - if output and output.stderr: - pprint(output.stderr.decode()) - raise ApiError(f"Error trying to create secret '{secret_name}': {e}") - - -def delete_secret(secret_name): - if secret_name == "*": - return delete_all_secrets() - output = None - try: - delete_command = ['kubectl', 'delete', '-n', _namespace, 'secret', secret_name] - output = subprocess.run(delete_command, capture_output=True, check=True, timeout=10) - print(f"Credential {secret_name} was deleted") - except Exception as e: - if output and output.stderr: - pprint(output.stderr.decode()) - raise ApiError(f"Error trying to delete secret '{secret_name}': {e}") - - -def delete_all_secrets(name_prefix=secret_name_prefix): - secrets = list_secrets(name_prefix=name_prefix) - for secret in secrets: - secret_name = secret["metadata"]["name"] - delete_secret(secret_name) - - -def get_secret(secret_name, decode=False) -> dict: - output = None - try: - get_command = ['kubectl', '-n', _namespace, '-o', 'json', 'get', 'secret', secret_name] - output = subprocess.run(get_command, capture_output=True, check=True, timeout=10) - secret_data = json.loads(output.stdout.decode()) or {} - secret = secret_data.get("data") - if decode: - for k, v in secret.items(): - secret[k] = b64decode(v).decode() - return secret - except Exception as e: - if output and output.stderr: - pprint(output.stderr.decode()) - raise ApiError( f"Error trying to retrieve secret '{secret_name}': {e}") - - -def list_secrets(name_prefix=secret_name_prefix, decode=False) -> [dict]: - output = None - try: - list_command = ['kubectl', '-n', _namespace, '-o', 'json', 'get', 'secrets'] - output = subprocess.run(list_command, capture_output=True, check=True, timeout=10) - secrets_data = json.loads(output.stdout.decode()) or {} - mlx_secrets = [d for d in secrets_data.get("items") or [] - if d["metadata"]["name"].startswith(name_prefix)] - if decode: - for s in mlx_secrets: - for k, v in s["data"].items(): - s["data"][k] = b64decode(v).decode() - return mlx_secrets - except Exception as e: - if output and output.stderr: - pprint(output.stderr.decode()) - raise ApiError(f"Error trying to list secrets '{name_prefix}...': {e}") diff --git a/api/server/swagger_server/models/__init__.py b/api/server/swagger_server/models/__init__.py deleted file mode 100644 index 1b79a5d3..00000000 --- a/api/server/swagger_server/models/__init__.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -# flake8: noqa -from __future__ import absolute_import -# import models into model package -from swagger_server.models.any_value import AnyValue -from swagger_server.models.api_access_token import ApiAccessToken -from swagger_server.models.api_asset import ApiAsset -from swagger_server.models.api_component import ApiComponent -from swagger_server.models.api_dataset import ApiDataset -from swagger_server.models.api_model import ApiModel -from swagger_server.models.api_notebook import ApiNotebook -from swagger_server.models.api_pipeline import ApiPipeline -# import ApiAsset(s) before ApiCatalog... classes to prevent circular import errors -from swagger_server.models.api_catalog_upload import ApiCatalogUpload -from swagger_server.models.api_catalog_upload_item import ApiCatalogUploadItem -from swagger_server.models.api_credential import ApiCredential -from swagger_server.models.api_generate_code_response import ApiGenerateCodeResponse -from swagger_server.models.api_generate_model_code_response import ApiGenerateModelCodeResponse -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse -from swagger_server.models.api_inferenceservice import ApiInferenceservice -from swagger_server.models.api_list_catalog_items_response import ApiListCatalogItemsResponse -from swagger_server.models.api_list_catalog_upload_errors import ApiListCatalogUploadErrors -from swagger_server.models.api_list_components_response import ApiListComponentsResponse -from swagger_server.models.api_list_credentials_response import ApiListCredentialsResponse -from swagger_server.models.api_list_datasets_response import ApiListDatasetsResponse -from swagger_server.models.api_list_inferenceservices_response import ApiListInferenceservicesResponse -from swagger_server.models.api_list_models_response import ApiListModelsResponse -from swagger_server.models.api_list_notebooks_response import ApiListNotebooksResponse -from swagger_server.models.api_list_pipelines_response import ApiListPipelinesResponse -from swagger_server.models.api_metadata import ApiMetadata -from swagger_server.models.api_model_framework import ApiModelFramework -from swagger_server.models.api_model_framework_runtimes import ApiModelFrameworkRuntimes -from swagger_server.models.api_model_script import ApiModelScript -from swagger_server.models.api_parameter import ApiParameter -from swagger_server.models.api_pipeline_custom import ApiPipelineCustom -from swagger_server.models.api_pipeline_custom_run_payload import ApiPipelineCustomRunPayload -from swagger_server.models.api_pipeline_dag import ApiPipelineDAG -from swagger_server.models.api_pipeline_extension import ApiPipelineExtension -from swagger_server.models.api_pipeline_inputs import ApiPipelineInputs -from swagger_server.models.api_pipeline_task import ApiPipelineTask -from swagger_server.models.api_pipeline_task_arguments import ApiPipelineTaskArguments -from swagger_server.models.api_run_code_response import ApiRunCodeResponse -from swagger_server.models.api_settings import ApiSettings -from swagger_server.models.api_settings_section import ApiSettingsSection -from swagger_server.models.api_status import ApiStatus -from swagger_server.models.api_url import ApiUrl -from swagger_server.models.dictionary import Dictionary -from swagger_server.models.protobuf_any import ProtobufAny -from swagger_server.models.api_catalog_upload_error import ApiCatalogUploadError -from swagger_server.models.api_catalog_upload_response import ApiCatalogUploadResponse -from swagger_server.models.api_pipeline_extended import ApiPipelineExtended diff --git a/api/server/swagger_server/models/any_value.py b/api/server/swagger_server/models/any_value.py deleted file mode 100644 index e6fe3345..00000000 --- a/api/server/swagger_server/models/any_value.py +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class AnyValue(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self): # noqa: E501 - """AnyValue - a model defined in Swagger - - """ - self.swagger_types = { - } - - self.attribute_map = { - } - - @classmethod - def from_dict(cls, dikt) -> 'AnyValue': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The anyValue of this AnyValue. # noqa: E501 - :rtype: AnyValue - """ - return util.deserialize_model(dikt, cls) diff --git a/api/server/swagger_server/models/api_access_token.py b/api/server/swagger_server/models/api_access_token.py deleted file mode 100644 index 31dace26..00000000 --- a/api/server/swagger_server/models/api_access_token.py +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiAccessToken(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, api_token: str=None, url_host: str=None): # noqa: E501 - """ApiAccessToken - a model defined in Swagger - - :param api_token: The api_token of this ApiAccessToken. # noqa: E501 - :type api_token: str - :param url_host: The url_host of this ApiAccessToken. # noqa: E501 - :type url_host: str - """ - self.swagger_types = { - 'api_token': str, - 'url_host': str - } - - self.attribute_map = { - 'api_token': 'api_token', - 'url_host': 'url_host' - } - - self._api_token = api_token - self._url_host = url_host - - @classmethod - def from_dict(cls, dikt) -> 'ApiAccessToken': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiAccessToken of this ApiAccessToken. # noqa: E501 - :rtype: ApiAccessToken - """ - return util.deserialize_model(dikt, cls) - - @property - def api_token(self) -> str: - """Gets the api_token of this ApiAccessToken. - - A read-only API access token. # noqa: E501 - - :return: The api_token of this ApiAccessToken. - :rtype: str - """ - return self._api_token - - @api_token.setter - def api_token(self, api_token: str): - """Sets the api_token of this ApiAccessToken. - - A read-only API access token. # noqa: E501 - - :param api_token: The api_token of this ApiAccessToken. - :type api_token: str - """ - if api_token is None: - raise ValueError("Invalid value for `api_token`, must not be `None`") # noqa: E501 - - self._api_token = api_token - - @property - def url_host(self) -> str: - """Gets the url_host of this ApiAccessToken. - - The API server host that this API token applies to. # noqa: E501 - - :return: The url_host of this ApiAccessToken. - :rtype: str - """ - return self._url_host - - @url_host.setter - def url_host(self, url_host: str): - """Sets the url_host of this ApiAccessToken. - - The API server host that this API token applies to. # noqa: E501 - - :param url_host: The url_host of this ApiAccessToken. - :type url_host: str - """ - if url_host is None: - raise ValueError("Invalid value for `url_host`, must not be `None`") # noqa: E501 - - self._url_host = url_host diff --git a/api/server/swagger_server/models/api_asset.py b/api/server/swagger_server/models/api_asset.py deleted file mode 100644 index de23c7ba..00000000 --- a/api/server/swagger_server/models/api_asset.py +++ /dev/null @@ -1,253 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiAsset(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, id: str=None, created_at: datetime=None, name: str=None, description: str=None, featured: bool=None, publish_approved: bool=None, related_assets: List[str]=None, filter_categories: Dict[str, str]=None): # noqa: E501 - """ApiAsset - a model defined in Swagger - - :param id: The id of this ApiAsset. # noqa: E501 - :type id: str - :param created_at: The created_at of this ApiAsset. # noqa: E501 - :type created_at: datetime - :param name: The name of this ApiAsset. # noqa: E501 - :type name: str - :param description: The description of this ApiAsset. # noqa: E501 - :type description: str - :param featured: The featured of this ApiAsset. # noqa: E501 - :type featured: bool - :param publish_approved: The publish_approved of this ApiAsset. # noqa: E501 - :type publish_approved: bool - :param related_assets: The related_assets of this ApiAsset. # noqa: E501 - :type related_assets: List[str] - :param filter_categories: The filter_categories of this ApiAsset. # noqa: E501 - :type filter_categories: Dict[str, str] - """ - self.swagger_types = { - 'id': str, - 'created_at': datetime, - 'name': str, - 'description': str, - 'featured': bool, - 'publish_approved': bool, - 'related_assets': List[str], - 'filter_categories': Dict[str, str] - } - - self.attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'featured': 'featured', - 'publish_approved': 'publish_approved', - 'related_assets': 'related_assets', - 'filter_categories': 'filter_categories' - } - - self._id = id - self._created_at = created_at - self._name = name - self._description = description - self._featured = featured - self._publish_approved = publish_approved - self._related_assets = related_assets - self._filter_categories = filter_categories - - @classmethod - def from_dict(cls, dikt) -> 'ApiAsset': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiAsset of this ApiAsset. # noqa: E501 - :rtype: ApiAsset - """ - return util.deserialize_model(dikt, cls) - - @property - def id(self) -> str: - """Gets the id of this ApiAsset. - - - :return: The id of this ApiAsset. - :rtype: str - """ - return self._id - - @id.setter - def id(self, id: str): - """Sets the id of this ApiAsset. - - - :param id: The id of this ApiAsset. - :type id: str - """ - - self._id = id - - @property - def created_at(self) -> datetime: - """Gets the created_at of this ApiAsset. - - - :return: The created_at of this ApiAsset. - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at: datetime): - """Sets the created_at of this ApiAsset. - - - :param created_at: The created_at of this ApiAsset. - :type created_at: datetime - """ - - self._created_at = created_at - - @property - def name(self) -> str: - """Gets the name of this ApiAsset. - - - :return: The name of this ApiAsset. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiAsset. - - - :param name: The name of this ApiAsset. - :type name: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self) -> str: - """Gets the description of this ApiAsset. - - - :return: The description of this ApiAsset. - :rtype: str - """ - return self._description - - @description.setter - def description(self, description: str): - """Sets the description of this ApiAsset. - - - :param description: The description of this ApiAsset. - :type description: str - """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 - - self._description = description - - @property - def featured(self) -> bool: - """Gets the featured of this ApiAsset. - - - :return: The featured of this ApiAsset. - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured: bool): - """Sets the featured of this ApiAsset. - - - :param featured: The featured of this ApiAsset. - :type featured: bool - """ - - self._featured = featured - - @property - def publish_approved(self) -> bool: - """Gets the publish_approved of this ApiAsset. - - - :return: The publish_approved of this ApiAsset. - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved: bool): - """Sets the publish_approved of this ApiAsset. - - - :param publish_approved: The publish_approved of this ApiAsset. - :type publish_approved: bool - """ - - self._publish_approved = publish_approved - - @property - def related_assets(self) -> List[str]: - """Gets the related_assets of this ApiAsset. - - - :return: The related_assets of this ApiAsset. - :rtype: List[str] - """ - return self._related_assets - - @related_assets.setter - def related_assets(self, related_assets: List[str]): - """Sets the related_assets of this ApiAsset. - - - :param related_assets: The related_assets of this ApiAsset. - :type related_assets: List[str] - """ - - self._related_assets = related_assets - - @property - def filter_categories(self) -> Dict[str, str]: - """Gets the filter_categories of this ApiAsset. - - - :return: The filter_categories of this ApiAsset. - :rtype: Dict[str, str] - """ - return self._filter_categories - - @filter_categories.setter - def filter_categories(self, filter_categories: Dict[str, str]): - """Sets the filter_categories of this ApiAsset. - - - :param filter_categories: The filter_categories of this ApiAsset. - :type filter_categories: Dict[str, str] - """ - - self._filter_categories = filter_categories diff --git a/api/server/swagger_server/models/api_catalog_upload.py b/api/server/swagger_server/models/api_catalog_upload.py deleted file mode 100644 index 8f431603..00000000 --- a/api/server/swagger_server/models/api_catalog_upload.py +++ /dev/null @@ -1,201 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.api_access_token import ApiAccessToken -from swagger_server.models.api_catalog_upload_item import ApiCatalogUploadItem -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiCatalogUpload(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, api_access_tokens: List[ApiAccessToken]=None, components: List[ApiCatalogUploadItem]=None, datasets: List[ApiCatalogUploadItem]=None, models: List[ApiCatalogUploadItem]=None, notebooks: List[ApiCatalogUploadItem]=None, pipelines: List[ApiCatalogUploadItem]=None): # noqa: E501 - """ApiCatalogUpload - a model defined in Swagger - - :param api_access_tokens: The api_access_tokens of this ApiCatalogUpload. # noqa: E501 - :type api_access_tokens: List[ApiAccessToken] - :param components: The components of this ApiCatalogUpload. # noqa: E501 - :type components: List[ApiCatalogUploadItem] - :param datasets: The datasets of this ApiCatalogUpload. # noqa: E501 - :type datasets: List[ApiCatalogUploadItem] - :param models: The models of this ApiCatalogUpload. # noqa: E501 - :type models: List[ApiCatalogUploadItem] - :param notebooks: The notebooks of this ApiCatalogUpload. # noqa: E501 - :type notebooks: List[ApiCatalogUploadItem] - :param pipelines: The pipelines of this ApiCatalogUpload. # noqa: E501 - :type pipelines: List[ApiCatalogUploadItem] - """ - self.swagger_types = { - 'api_access_tokens': List[ApiAccessToken], - 'components': List[ApiCatalogUploadItem], - 'datasets': List[ApiCatalogUploadItem], - 'models': List[ApiCatalogUploadItem], - 'notebooks': List[ApiCatalogUploadItem], - 'pipelines': List[ApiCatalogUploadItem] - } - - self.attribute_map = { - 'api_access_tokens': 'api_access_tokens', - 'components': 'components', - 'datasets': 'datasets', - 'models': 'models', - 'notebooks': 'notebooks', - 'pipelines': 'pipelines' - } - - self._api_access_tokens = api_access_tokens - self._components = components - self._datasets = datasets - self._models = models - self._notebooks = notebooks - self._pipelines = pipelines - - @classmethod - def from_dict(cls, dikt) -> 'ApiCatalogUpload': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiCatalogUpload of this ApiCatalogUpload. # noqa: E501 - :rtype: ApiCatalogUpload - """ - return util.deserialize_model(dikt, cls) - - @property - def api_access_tokens(self) -> List[ApiAccessToken]: - """Gets the api_access_tokens of this ApiCatalogUpload. - - A mapping of read-only API access tokens to a partial URL. # noqa: E501 - - :return: The api_access_tokens of this ApiCatalogUpload. - :rtype: List[ApiAccessToken] - """ - return self._api_access_tokens - - @api_access_tokens.setter - def api_access_tokens(self, api_access_tokens: List[ApiAccessToken]): - """Sets the api_access_tokens of this ApiCatalogUpload. - - A mapping of read-only API access tokens to a partial URL. # noqa: E501 - - :param api_access_tokens: The api_access_tokens of this ApiCatalogUpload. - :type api_access_tokens: List[ApiAccessToken] - """ - - self._api_access_tokens = api_access_tokens - - @property - def components(self) -> List[ApiCatalogUploadItem]: - """Gets the components of this ApiCatalogUpload. - - - :return: The components of this ApiCatalogUpload. - :rtype: List[ApiCatalogUploadItem] - """ - return self._components - - @components.setter - def components(self, components: List[ApiCatalogUploadItem]): - """Sets the components of this ApiCatalogUpload. - - - :param components: The components of this ApiCatalogUpload. - :type components: List[ApiCatalogUploadItem] - """ - - self._components = components - - @property - def datasets(self) -> List[ApiCatalogUploadItem]: - """Gets the datasets of this ApiCatalogUpload. - - - :return: The datasets of this ApiCatalogUpload. - :rtype: List[ApiCatalogUploadItem] - """ - return self._datasets - - @datasets.setter - def datasets(self, datasets: List[ApiCatalogUploadItem]): - """Sets the datasets of this ApiCatalogUpload. - - - :param datasets: The datasets of this ApiCatalogUpload. - :type datasets: List[ApiCatalogUploadItem] - """ - - self._datasets = datasets - - @property - def models(self) -> List[ApiCatalogUploadItem]: - """Gets the models of this ApiCatalogUpload. - - - :return: The models of this ApiCatalogUpload. - :rtype: List[ApiCatalogUploadItem] - """ - return self._models - - @models.setter - def models(self, models: List[ApiCatalogUploadItem]): - """Sets the models of this ApiCatalogUpload. - - - :param models: The models of this ApiCatalogUpload. - :type models: List[ApiCatalogUploadItem] - """ - - self._models = models - - @property - def notebooks(self) -> List[ApiCatalogUploadItem]: - """Gets the notebooks of this ApiCatalogUpload. - - - :return: The notebooks of this ApiCatalogUpload. - :rtype: List[ApiCatalogUploadItem] - """ - return self._notebooks - - @notebooks.setter - def notebooks(self, notebooks: List[ApiCatalogUploadItem]): - """Sets the notebooks of this ApiCatalogUpload. - - - :param notebooks: The notebooks of this ApiCatalogUpload. - :type notebooks: List[ApiCatalogUploadItem] - """ - - self._notebooks = notebooks - - @property - def pipelines(self) -> List[ApiCatalogUploadItem]: - """Gets the pipelines of this ApiCatalogUpload. - - - :return: The pipelines of this ApiCatalogUpload. - :rtype: List[ApiCatalogUploadItem] - """ - return self._pipelines - - @pipelines.setter - def pipelines(self, pipelines: List[ApiCatalogUploadItem]): - """Sets the pipelines of this ApiCatalogUpload. - - - :param pipelines: The pipelines of this ApiCatalogUpload. - :type pipelines: List[ApiCatalogUploadItem] - """ - - self._pipelines = pipelines diff --git a/api/server/swagger_server/models/api_catalog_upload_error.py b/api/server/swagger_server/models/api_catalog_upload_error.py deleted file mode 100644 index 6f986b08..00000000 --- a/api/server/swagger_server/models/api_catalog_upload_error.py +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiCatalogUploadError(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, name: str=None, url: str=None, error_message: str=None, status_code: int=None): # noqa: E501 - """ApiCatalogUploadError - a model defined in Swagger - - :param name: The name of this ApiCatalogUploadError. # noqa: E501 - :type name: str - :param url: The url of this ApiCatalogUploadError. # noqa: E501 - :type url: str - :param error_message: The error_message of this ApiCatalogUploadError. # noqa: E501 - :type error_message: str - :param status_code: The status_code of this ApiCatalogUploadError. # noqa: E501 - :type status_code: int - """ - self.swagger_types = { - 'name': str, - 'url': str, - 'error_message': str, - 'status_code': int - } - - self.attribute_map = { - 'name': 'name', - 'url': 'url', - 'error_message': 'error_message', - 'status_code': 'status_code' - } - - self._name = name - self._url = url - self._error_message = error_message - self._status_code = status_code - - @classmethod - def from_dict(cls, dikt) -> 'ApiCatalogUploadError': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiCatalogUploadError of this ApiCatalogUploadError. # noqa: E501 - :rtype: ApiCatalogUploadError - """ - return util.deserialize_model(dikt, cls) - - @property - def name(self) -> str: - """Gets the name of this ApiCatalogUploadError. - - - :return: The name of this ApiCatalogUploadError. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiCatalogUploadError. - - - :param name: The name of this ApiCatalogUploadError. - :type name: str - """ - - self._name = name - - @property - def url(self) -> str: - """Gets the url of this ApiCatalogUploadError. - - The URL to the YAML metadata file, i.e. on GitHub.com # noqa: E501 - - :return: The url of this ApiCatalogUploadError. - :rtype: str - """ - return self._url - - @url.setter - def url(self, url: str): - """Sets the url of this ApiCatalogUploadError. - - The URL to the YAML metadata file, i.e. on GitHub.com # noqa: E501 - - :param url: The url of this ApiCatalogUploadError. - :type url: str - """ - if url is None: - raise ValueError("Invalid value for `url`, must not be `None`") # noqa: E501 - - self._url = url - - @property - def error_message(self) -> str: - """Gets the error_message of this ApiCatalogUploadError. - - - :return: The error_message of this ApiCatalogUploadError. - :rtype: str - """ - return self._error_message - - @error_message.setter - def error_message(self, error_message: str): - """Sets the error_message of this ApiCatalogUploadError. - - - :param error_message: The error_message of this ApiCatalogUploadError. - :type error_message: str - """ - - self._error_message = error_message - - @property - def status_code(self) -> int: - """Gets the status_code of this ApiCatalogUploadError. - - - :return: The status_code of this ApiCatalogUploadError. - :rtype: int - """ - return self._status_code - - @status_code.setter - def status_code(self, status_code: int): - """Sets the status_code of this ApiCatalogUploadError. - - - :param status_code: The status_code of this ApiCatalogUploadError. - :type status_code: int - """ - - self._status_code = status_code diff --git a/api/server/swagger_server/models/api_catalog_upload_item.py b/api/server/swagger_server/models/api_catalog_upload_item.py deleted file mode 100644 index 52daa56b..00000000 --- a/api/server/swagger_server/models/api_catalog_upload_item.py +++ /dev/null @@ -1,97 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiCatalogUploadItem(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, name: str=None, url: str=None): # noqa: E501 - """ApiCatalogUploadItem - a model defined in Swagger - - :param name: The name of this ApiCatalogUploadItem. # noqa: E501 - :type name: str - :param url: The url of this ApiCatalogUploadItem. # noqa: E501 - :type url: str - """ - self.swagger_types = { - 'name': str, - 'url': str - } - - self.attribute_map = { - 'name': 'name', - 'url': 'url' - } - - self._name = name - self._url = url - - @classmethod - def from_dict(cls, dikt) -> 'ApiCatalogUploadItem': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiCatalogUploadItem of this ApiCatalogUploadItem. # noqa: E501 - :rtype: ApiCatalogUploadItem - """ - return util.deserialize_model(dikt, cls) - - @property - def name(self) -> str: - """Gets the name of this ApiCatalogUploadItem. - - - :return: The name of this ApiCatalogUploadItem. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiCatalogUploadItem. - - - :param name: The name of this ApiCatalogUploadItem. - :type name: str - """ - - self._name = name - - @property - def url(self) -> str: - """Gets the url of this ApiCatalogUploadItem. - - The URL to the YAML metadata file, i.e. on GitHub.com # noqa: E501 - - :return: The url of this ApiCatalogUploadItem. - :rtype: str - """ - return self._url - - @url.setter - def url(self, url: str): - """Sets the url of this ApiCatalogUploadItem. - - The URL to the YAML metadata file, i.e. on GitHub.com # noqa: E501 - - :param url: The url of this ApiCatalogUploadItem. - :type url: str - """ - if url is None: - raise ValueError("Invalid value for `url`, must not be `None`") # noqa: E501 - - self._url = url diff --git a/api/server/swagger_server/models/api_catalog_upload_response.py b/api/server/swagger_server/models/api_catalog_upload_response.py deleted file mode 100644 index be1f5e03..00000000 --- a/api/server/swagger_server/models/api_catalog_upload_response.py +++ /dev/null @@ -1,302 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models import ApiComponent, ApiDataset, ApiModel, ApiNotebook, ApiPipeline, ApiCatalogUploadError -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiCatalogUploadResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, components: List[ApiComponent]=None, datasets: List[ApiDataset]=None, models: List[ApiModel]=None, notebooks: List[ApiNotebook]=None, pipelines: List[ApiPipeline]=None, total_size: int=None, next_page_token: str=None, errors: List[ApiCatalogUploadError]=None, total_errors: int=None, total_created: int=None): # noqa: E501 - """ApiCatalogUploadResponse - a model defined in Swagger - - :param components: The components of this ApiCatalogUploadResponse. # noqa: E501 - :type components: List[ApiComponent] - :param datasets: The datasets of this ApiCatalogUploadResponse. # noqa: E501 - :type datasets: List[ApiDataset] - :param models: The models of this ApiCatalogUploadResponse. # noqa: E501 - :type models: List[ApiModel] - :param notebooks: The notebooks of this ApiCatalogUploadResponse. # noqa: E501 - :type notebooks: List[ApiNotebook] - :param pipelines: The pipelines of this ApiCatalogUploadResponse. # noqa: E501 - :type pipelines: List[ApiPipeline] - :param total_size: The total_size of this ApiCatalogUploadResponse. # noqa: E501 - :type total_size: int - :param next_page_token: The next_page_token of this ApiCatalogUploadResponse. # noqa: E501 - :type next_page_token: str - :param errors: The errors of this ApiCatalogUploadResponse. # noqa: E501 - :type errors: List[ApiCatalogUploadError] - :param total_errors: The total_errors of this ApiCatalogUploadResponse. # noqa: E501 - :type total_errors: int - :param total_created: The total_created of this ApiCatalogUploadResponse. # noqa: E501 - :type total_created: int - """ - self.swagger_types = { - 'components': List[ApiComponent], - 'datasets': List[ApiDataset], - 'models': List[ApiModel], - 'notebooks': List[ApiNotebook], - 'pipelines': List[ApiPipeline], - 'total_size': int, - 'next_page_token': str, - 'errors': List[ApiCatalogUploadError], - 'total_errors': int, - 'total_created': int - } - - self.attribute_map = { - 'components': 'components', - 'datasets': 'datasets', - 'models': 'models', - 'notebooks': 'notebooks', - 'pipelines': 'pipelines', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token', - 'errors': 'errors', - 'total_errors': 'total_errors', - 'total_created': 'total_created' - } - - self._components = components - self._datasets = datasets - self._models = models - self._notebooks = notebooks - self._pipelines = pipelines - self._total_size = total_size - self._next_page_token = next_page_token - self._errors = errors - self._total_errors = total_errors - self._total_created = total_created - - @classmethod - def from_dict(cls, dikt) -> 'ApiCatalogUploadResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiCatalogUploadResponse of this ApiCatalogUploadResponse. # noqa: E501 - :rtype: ApiCatalogUploadResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def components(self) -> List[ApiComponent]: - """Gets the components of this ApiCatalogUploadResponse. - - - :return: The components of this ApiCatalogUploadResponse. - :rtype: List[ApiComponent] - """ - return self._components - - @components.setter - def components(self, components: List[ApiComponent]): - """Sets the components of this ApiCatalogUploadResponse. - - - :param components: The components of this ApiCatalogUploadResponse. - :type components: List[ApiComponent] - """ - - self._components = components - - @property - def datasets(self) -> List[ApiDataset]: - """Gets the datasets of this ApiCatalogUploadResponse. - - - :return: The datasets of this ApiCatalogUploadResponse. - :rtype: List[ApiDataset] - """ - return self._datasets - - @datasets.setter - def datasets(self, datasets: List[ApiDataset]): - """Sets the datasets of this ApiCatalogUploadResponse. - - - :param datasets: The datasets of this ApiCatalogUploadResponse. - :type datasets: List[ApiDataset] - """ - - self._datasets = datasets - - @property - def models(self) -> List[ApiModel]: - """Gets the models of this ApiCatalogUploadResponse. - - - :return: The models of this ApiCatalogUploadResponse. - :rtype: List[ApiModel] - """ - return self._models - - @models.setter - def models(self, models: List[ApiModel]): - """Sets the models of this ApiCatalogUploadResponse. - - - :param models: The models of this ApiCatalogUploadResponse. - :type models: List[ApiModel] - """ - - self._models = models - - @property - def notebooks(self) -> List[ApiNotebook]: - """Gets the notebooks of this ApiCatalogUploadResponse. - - - :return: The notebooks of this ApiCatalogUploadResponse. - :rtype: List[ApiNotebook] - """ - return self._notebooks - - @notebooks.setter - def notebooks(self, notebooks: List[ApiNotebook]): - """Sets the notebooks of this ApiCatalogUploadResponse. - - - :param notebooks: The notebooks of this ApiCatalogUploadResponse. - :type notebooks: List[ApiNotebook] - """ - - self._notebooks = notebooks - - @property - def pipelines(self) -> List[ApiPipeline]: - """Gets the pipelines of this ApiCatalogUploadResponse. - - - :return: The pipelines of this ApiCatalogUploadResponse. - :rtype: List[ApiPipeline] - """ - return self._pipelines - - @pipelines.setter - def pipelines(self, pipelines: List[ApiPipeline]): - """Sets the pipelines of this ApiCatalogUploadResponse. - - - :param pipelines: The pipelines of this ApiCatalogUploadResponse. - :type pipelines: List[ApiPipeline] - """ - - self._pipelines = pipelines - - @property - def total_size(self) -> int: - """Gets the total_size of this ApiCatalogUploadResponse. - - - :return: The total_size of this ApiCatalogUploadResponse. - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size: int): - """Sets the total_size of this ApiCatalogUploadResponse. - - - :param total_size: The total_size of this ApiCatalogUploadResponse. - :type total_size: int - """ - - self._total_size = total_size - - @property - def next_page_token(self) -> str: - """Gets the next_page_token of this ApiCatalogUploadResponse. - - - :return: The next_page_token of this ApiCatalogUploadResponse. - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token: str): - """Sets the next_page_token of this ApiCatalogUploadResponse. - - - :param next_page_token: The next_page_token of this ApiCatalogUploadResponse. - :type next_page_token: str - """ - - self._next_page_token = next_page_token - - @property - def errors(self) -> List[ApiCatalogUploadError]: - """Gets the errors of this ApiCatalogUploadResponse. - - - :return: The errors of this ApiCatalogUploadResponse. - :rtype: List[ApiCatalogUploadError] - """ - return self._errors - - @errors.setter - def errors(self, errors: List[ApiCatalogUploadError]): - """Sets the errors of this ApiCatalogUploadResponse. - - - :param errors: The errors of this ApiCatalogUploadResponse. - :type errors: List[ApiCatalogUploadError] - """ - - self._errors = errors - - @property - def total_errors(self) -> int: - """Gets the total_errors of this ApiCatalogUploadResponse. - - - :return: The total_errors of this ApiCatalogUploadResponse. - :rtype: int - """ - return self._total_errors - - @total_errors.setter - def total_errors(self, total_errors: int): - """Sets the total_errors of this ApiCatalogUploadResponse. - - - :param total_errors: The total_errors of this ApiCatalogUploadResponse. - :type total_errors: int - """ - - self._total_errors = total_errors - - @property - def total_created(self) -> int: - """Gets the total_created of this ApiCatalogUploadResponse. - - - :return: The total_created of this ApiCatalogUploadResponse. - :rtype: int - """ - return self._total_created - - @total_created.setter - def total_created(self, total_created: int): - """Sets the total_created of this ApiCatalogUploadResponse. - - - :param total_created: The total_created of this ApiCatalogUploadResponse. - :type total_created: int - """ - - self._total_created = total_created diff --git a/api/server/swagger_server/models/api_component.py b/api/server/swagger_server/models/api_component.py deleted file mode 100644 index 9313f063..00000000 --- a/api/server/swagger_server/models/api_component.py +++ /dev/null @@ -1,307 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.api_asset import ApiAsset -from swagger_server.models.api_metadata import ApiMetadata # noqa: F401,E501 -from swagger_server.models.api_parameter import ApiParameter # noqa: F401,E501 -from swagger_server import util - - -class ApiComponent(ApiAsset): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, id: str=None, created_at: datetime=None, name: str=None, description: str=None, featured: bool=None, publish_approved: bool=None, related_assets: List[str]=None, filter_categories: Dict[str, str]=None, metadata: ApiMetadata=None, parameters: List[ApiParameter]=None): # noqa: E501 - """ApiComponent - a model defined in Swagger - - :param id: The id of this ApiComponent. # noqa: E501 - :type id: str - :param created_at: The created_at of this ApiComponent. # noqa: E501 - :type created_at: datetime - :param name: The name of this ApiComponent. # noqa: E501 - :type name: str - :param description: The description of this ApiComponent. # noqa: E501 - :type description: str - :param featured: The featured of this ApiComponent. # noqa: E501 - :type featured: bool - :param publish_approved: The publish_approved of this ApiComponent. # noqa: E501 - :type publish_approved: bool - :param related_assets: The related_assets of this ApiComponent. # noqa: E501 - :type related_assets: List[str] - :param filter_categories: The filter_categories of this ApiComponent. # noqa: E501 - :type filter_categories: Dict[str, str] - :param metadata: The metadata of this ApiComponent. # noqa: E501 - :type metadata: ApiMetadata - :param parameters: The parameters of this ApiComponent. # noqa: E501 - :type parameters: List[ApiParameter] - """ - self.swagger_types = { - 'id': str, - 'created_at': datetime, - 'name': str, - 'description': str, - 'featured': bool, - 'publish_approved': bool, - 'related_assets': List[str], - 'filter_categories': Dict[str, str], - 'metadata': ApiMetadata, - 'parameters': List[ApiParameter] - } - - self.attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'featured': 'featured', - 'publish_approved': 'publish_approved', - 'related_assets': 'related_assets', - 'filter_categories': 'filter_categories', - 'metadata': 'metadata', - 'parameters': 'parameters' - } - - self._id = id - self._created_at = created_at - self._name = name - self._description = description - self._featured = featured - self._publish_approved = publish_approved - self._related_assets = related_assets - self._filter_categories = filter_categories - self._metadata = metadata - self._parameters = parameters - - @classmethod - def from_dict(cls, dikt) -> 'ApiComponent': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiComponent of this ApiComponent. # noqa: E501 - :rtype: ApiComponent - """ - return util.deserialize_model(dikt, cls) - - @property - def id(self) -> str: - """Gets the id of this ApiComponent. - - - :return: The id of this ApiComponent. - :rtype: str - """ - return self._id - - @id.setter - def id(self, id: str): - """Sets the id of this ApiComponent. - - - :param id: The id of this ApiComponent. - :type id: str - """ - - self._id = id - - @property - def created_at(self) -> datetime: - """Gets the created_at of this ApiComponent. - - - :return: The created_at of this ApiComponent. - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at: datetime): - """Sets the created_at of this ApiComponent. - - - :param created_at: The created_at of this ApiComponent. - :type created_at: datetime - """ - - self._created_at = created_at - - @property - def name(self) -> str: - """Gets the name of this ApiComponent. - - - :return: The name of this ApiComponent. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiComponent. - - - :param name: The name of this ApiComponent. - :type name: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self) -> str: - """Gets the description of this ApiComponent. - - - :return: The description of this ApiComponent. - :rtype: str - """ - return self._description - - @description.setter - def description(self, description: str): - """Sets the description of this ApiComponent. - - - :param description: The description of this ApiComponent. - :type description: str - """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 - - self._description = description - - @property - def featured(self) -> bool: - """Gets the featured of this ApiComponent. - - - :return: The featured of this ApiComponent. - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured: bool): - """Sets the featured of this ApiComponent. - - - :param featured: The featured of this ApiComponent. - :type featured: bool - """ - - self._featured = featured - - @property - def publish_approved(self) -> bool: - """Gets the publish_approved of this ApiComponent. - - - :return: The publish_approved of this ApiComponent. - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved: bool): - """Sets the publish_approved of this ApiComponent. - - - :param publish_approved: The publish_approved of this ApiComponent. - :type publish_approved: bool - """ - - self._publish_approved = publish_approved - - @property - def related_assets(self) -> List[str]: - """Gets the related_assets of this ApiComponent. - - - :return: The related_assets of this ApiComponent. - :rtype: List[str] - """ - return self._related_assets - - @related_assets.setter - def related_assets(self, related_assets: List[str]): - """Sets the related_assets of this ApiComponent. - - - :param related_assets: The related_assets of this ApiComponent. - :type related_assets: List[str] - """ - - self._related_assets = related_assets - - @property - def filter_categories(self) -> Dict[str, str]: - """Gets the filter_categories of this ApiComponent. - - - :return: The filter_categories of this ApiComponent. - :rtype: Dict[str, str] - """ - return self._filter_categories - - @filter_categories.setter - def filter_categories(self, filter_categories: Dict[str, str]): - """Sets the filter_categories of this ApiComponent. - - - :param filter_categories: The filter_categories of this ApiComponent. - :type filter_categories: Dict[str, str] - """ - - self._filter_categories = filter_categories - - @property - def metadata(self) -> ApiMetadata: - """Gets the metadata of this ApiComponent. - - - :return: The metadata of this ApiComponent. - :rtype: ApiMetadata - """ - return self._metadata - - @metadata.setter - def metadata(self, metadata: ApiMetadata): - """Sets the metadata of this ApiComponent. - - - :param metadata: The metadata of this ApiComponent. - :type metadata: ApiMetadata - """ - - self._metadata = metadata - - @property - def parameters(self) -> List[ApiParameter]: - """Gets the parameters of this ApiComponent. - - - :return: The parameters of this ApiComponent. - :rtype: List[ApiParameter] - """ - return self._parameters - - @parameters.setter - def parameters(self, parameters: List[ApiParameter]): - """Sets the parameters of this ApiComponent. - - - :param parameters: The parameters of this ApiComponent. - :type parameters: List[ApiParameter] - """ - - self._parameters = parameters diff --git a/api/server/swagger_server/models/api_credential.py b/api/server/swagger_server/models/api_credential.py deleted file mode 100644 index d0b48532..00000000 --- a/api/server/swagger_server/models/api_credential.py +++ /dev/null @@ -1,205 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiCredential(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, id: str=None, created_at: datetime=None, pipeline_id: str=None, project_id: str=None, api_key: str=None, data_assets: List[str]=None): # noqa: E501 - """ApiCredential - a model defined in Swagger - - :param id: The id of this ApiCredential. # noqa: E501 - :type id: str - :param created_at: The created_at of this ApiCredential. # noqa: E501 - :type created_at: datetime - :param pipeline_id: The pipeline_id of this ApiCredential. # noqa: E501 - :type pipeline_id: str - :param project_id: The project_id of this ApiCredential. # noqa: E501 - :type project_id: str - :param api_key: The api_key of this ApiCredential. # noqa: E501 - :type api_key: str - :param data_assets: The data_assets of this ApiCredential. # noqa: E501 - :type data_assets: List[str] - """ - self.swagger_types = { - 'id': str, - 'created_at': datetime, - 'pipeline_id': str, - 'project_id': str, - 'api_key': str, - 'data_assets': List[str] - } - - self.attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'pipeline_id': 'pipeline_id', - 'project_id': 'project_id', - 'api_key': 'api_key', - 'data_assets': 'data_assets' - } - - self._id = id - self._created_at = created_at - self._pipeline_id = pipeline_id - self._project_id = project_id - self._api_key = api_key - self._data_assets = data_assets - - @classmethod - def from_dict(cls, dikt) -> 'ApiCredential': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiCredential of this ApiCredential. # noqa: E501 - :rtype: ApiCredential - """ - return util.deserialize_model(dikt, cls) - - @property - def id(self) -> str: - """Gets the id of this ApiCredential. - - - :return: The id of this ApiCredential. - :rtype: str - """ - return self._id - - @id.setter - def id(self, id: str): - """Sets the id of this ApiCredential. - - - :param id: The id of this ApiCredential. - :type id: str - """ - - self._id = id - - @property - def created_at(self) -> datetime: - """Gets the created_at of this ApiCredential. - - - :return: The created_at of this ApiCredential. - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at: datetime): - """Sets the created_at of this ApiCredential. - - - :param created_at: The created_at of this ApiCredential. - :type created_at: datetime - """ - - self._created_at = created_at - - @property - def pipeline_id(self) -> str: - """Gets the pipeline_id of this ApiCredential. - - - :return: The pipeline_id of this ApiCredential. - :rtype: str - """ - return self._pipeline_id - - @pipeline_id.setter - def pipeline_id(self, pipeline_id: str): - """Sets the pipeline_id of this ApiCredential. - - - :param pipeline_id: The pipeline_id of this ApiCredential. - :type pipeline_id: str - """ - if pipeline_id is None: - raise ValueError("Invalid value for `pipeline_id`, must not be `None`") # noqa: E501 - - self._pipeline_id = pipeline_id - - @property - def project_id(self) -> str: - """Gets the project_id of this ApiCredential. - - - :return: The project_id of this ApiCredential. - :rtype: str - """ - return self._project_id - - @project_id.setter - def project_id(self, project_id: str): - """Sets the project_id of this ApiCredential. - - - :param project_id: The project_id of this ApiCredential. - :type project_id: str - """ - if project_id is None: - raise ValueError("Invalid value for `project_id`, must not be `None`") # noqa: E501 - - self._project_id = project_id - - @property - def api_key(self) -> str: - """Gets the api_key of this ApiCredential. - - TODO: what is the api_key # noqa: E501 - - :return: The api_key of this ApiCredential. - :rtype: str - """ - return self._api_key - - @api_key.setter - def api_key(self, api_key: str): - """Sets the api_key of this ApiCredential. - - TODO: what is the api_key # noqa: E501 - - :param api_key: The api_key of this ApiCredential. - :type api_key: str - """ - - self._api_key = api_key - - @property - def data_assets(self) -> List[str]: - """Gets the data_assets of this ApiCredential. - - List of data asset IDs # noqa: E501 - - :return: The data_assets of this ApiCredential. - :rtype: List[str] - """ - return self._data_assets - - @data_assets.setter - def data_assets(self, data_assets: List[str]): - """Sets the data_assets of this ApiCredential. - - List of data asset IDs # noqa: E501 - - :param data_assets: The data_assets of this ApiCredential. - :type data_assets: List[str] - """ - - self._data_assets = data_assets diff --git a/api/server/swagger_server/models/api_dataset.py b/api/server/swagger_server/models/api_dataset.py deleted file mode 100644 index 59822835..00000000 --- a/api/server/swagger_server/models/api_dataset.py +++ /dev/null @@ -1,411 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.api_asset import ApiAsset -from swagger_server.models.api_metadata import ApiMetadata # noqa: F401,E501 -from swagger_server.models.api_parameter import ApiParameter # noqa: F401,E501 -from swagger_server import util - - -class ApiDataset(ApiAsset): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, id: str=None, created_at: datetime=None, name: str=None, description: str=None, featured: bool=None, publish_approved: bool=None, related_assets: List[str]=None, filter_categories: Dict[str, str]=None, domain: str=None, format: str=None, size: str=None, number_of_records: int=None, license: str=None, metadata: ApiMetadata=None): # noqa: E501 - """ApiDataset - a model defined in Swagger - - :param id: The id of this ApiDataset. # noqa: E501 - :type id: str - :param created_at: The created_at of this ApiDataset. # noqa: E501 - :type created_at: datetime - :param name: The name of this ApiDataset. # noqa: E501 - :type name: str - :param description: The description of this ApiDataset. # noqa: E501 - :type description: str - :param featured: The featured of this ApiDataset. # noqa: E501 - :type featured: bool - :param publish_approved: The publish_approved of this ApiDataset. # noqa: E501 - :type publish_approved: bool - :param related_assets: The related_assets of this ApiDataset. # noqa: E501 - :type related_assets: List[str] - :param filter_categories: The filter_categories of this ApiDataset. # noqa: E501 - :type filter_categories: Dict[str, str] - :param domain: The domain of this ApiDataset. # noqa: E501 - :type domain: str - :param format: The format of this ApiDataset. # noqa: E501 - :type format: str - :param size: The size of this ApiDataset. # noqa: E501 - :type size: str - :param number_of_records: The number_of_records of this ApiDataset. # noqa: E501 - :type number_of_records: int - :param license: The license of this ApiDataset. # noqa: E501 - :type license: str - :param metadata: The metadata of this ApiDataset. # noqa: E501 - :type metadata: ApiMetadata - """ - self.swagger_types = { - 'id': str, - 'created_at': datetime, - 'name': str, - 'description': str, - 'featured': bool, - 'publish_approved': bool, - 'related_assets': List[str], - 'filter_categories': Dict[str, str], - 'domain': str, - 'format': str, - 'size': str, - 'number_of_records': int, - 'license': str, - 'metadata': ApiMetadata - } - - self.attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'featured': 'featured', - 'publish_approved': 'publish_approved', - 'related_assets': 'related_assets', - 'filter_categories': 'filter_categories', - 'domain': 'domain', - 'format': 'format', - 'size': 'size', - 'number_of_records': 'number_of_records', - 'license': 'license', - 'metadata': 'metadata' - } - - self._id = id - self._created_at = created_at - self._name = name - self._description = description - self._featured = featured - self._publish_approved = publish_approved - self._related_assets = related_assets - self._filter_categories = filter_categories - self._domain = domain - self._format = format - self._size = size - self._number_of_records = number_of_records - self._license = license - self._metadata = metadata - - @classmethod - def from_dict(cls, dikt) -> 'ApiDataset': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiDataset of this ApiDataset. # noqa: E501 - :rtype: ApiDataset - """ - return util.deserialize_model(dikt, cls) - - @property - def id(self) -> str: - """Gets the id of this ApiDataset. - - - :return: The id of this ApiDataset. - :rtype: str - """ - return self._id - - @id.setter - def id(self, id: str): - """Sets the id of this ApiDataset. - - - :param id: The id of this ApiDataset. - :type id: str - """ - - self._id = id - - @property - def created_at(self) -> datetime: - """Gets the created_at of this ApiDataset. - - - :return: The created_at of this ApiDataset. - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at: datetime): - """Sets the created_at of this ApiDataset. - - - :param created_at: The created_at of this ApiDataset. - :type created_at: datetime - """ - - self._created_at = created_at - - @property - def name(self) -> str: - """Gets the name of this ApiDataset. - - - :return: The name of this ApiDataset. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiDataset. - - - :param name: The name of this ApiDataset. - :type name: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self) -> str: - """Gets the description of this ApiDataset. - - - :return: The description of this ApiDataset. - :rtype: str - """ - return self._description - - @description.setter - def description(self, description: str): - """Sets the description of this ApiDataset. - - - :param description: The description of this ApiDataset. - :type description: str - """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 - - self._description = description - - @property - def featured(self) -> bool: - """Gets the featured of this ApiDataset. - - - :return: The featured of this ApiDataset. - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured: bool): - """Sets the featured of this ApiDataset. - - - :param featured: The featured of this ApiDataset. - :type featured: bool - """ - - self._featured = featured - - @property - def publish_approved(self) -> bool: - """Gets the publish_approved of this ApiDataset. - - - :return: The publish_approved of this ApiDataset. - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved: bool): - """Sets the publish_approved of this ApiDataset. - - - :param publish_approved: The publish_approved of this ApiDataset. - :type publish_approved: bool - """ - - self._publish_approved = publish_approved - - @property - def related_assets(self) -> List[str]: - """Gets the related_assets of this ApiDataset. - - - :return: The related_assets of this ApiDataset. - :rtype: List[str] - """ - return self._related_assets - - @related_assets.setter - def related_assets(self, related_assets: List[str]): - """Sets the related_assets of this ApiDataset. - - - :param related_assets: The related_assets of this ApiDataset. - :type related_assets: List[str] - """ - - self._related_assets = related_assets - - @property - def filter_categories(self) -> Dict[str, str]: - """Gets the filter_categories of this ApiDataset. - - - :return: The filter_categories of this ApiDataset. - :rtype: Dict[str, str] - """ - return self._filter_categories - - @filter_categories.setter - def filter_categories(self, filter_categories: Dict[str, str]): - """Sets the filter_categories of this ApiDataset. - - - :param filter_categories: The filter_categories of this ApiDataset. - :type filter_categories: Dict[str, str] - """ - - self._filter_categories = filter_categories - - @property - def domain(self) -> str: - """Gets the domain of this ApiDataset. - - - :return: The domain of this ApiDataset. - :rtype: str - """ - return self._domain - - @domain.setter - def domain(self, domain: str): - """Sets the domain of this ApiDataset. - - - :param domain: The domain of this ApiDataset. - :type domain: str - """ - - self._domain = domain - - @property - def format(self) -> str: - """Gets the format of this ApiDataset. - - - :return: The format of this ApiDataset. - :rtype: str - """ - return self._format - - @format.setter - def format(self, format: str): - """Sets the format of this ApiDataset. - - - :param format: The format of this ApiDataset. - :type format: str - """ - - self._format = format - - @property - def size(self) -> str: - """Gets the size of this ApiDataset. - - - :return: The size of this ApiDataset. - :rtype: str - """ - return self._size - - @size.setter - def size(self, size: str): - """Sets the size of this ApiDataset. - - - :param size: The size of this ApiDataset. - :type size: str - """ - - self._size = size - - @property - def number_of_records(self) -> int: - """Gets the number_of_records of this ApiDataset. - - - :return: The number_of_records of this ApiDataset. - :rtype: int - """ - return self._number_of_records - - @number_of_records.setter - def number_of_records(self, number_of_records: int): - """Sets the number_of_records of this ApiDataset. - - - :param number_of_records: The number_of_records of this ApiDataset. - :type number_of_records: int - """ - - self._number_of_records = number_of_records - - @property - def license(self) -> str: - """Gets the license of this ApiDataset. - - - :return: The license of this ApiDataset. - :rtype: str - """ - return self._license - - @license.setter - def license(self, license: str): - """Sets the license of this ApiDataset. - - - :param license: The license of this ApiDataset. - :type license: str - """ - - self._license = license - - @property - def metadata(self) -> ApiMetadata: - """Gets the metadata of this ApiDataset. - - - :return: The metadata of this ApiDataset. - :rtype: ApiMetadata - """ - return self._metadata - - @metadata.setter - def metadata(self, metadata: ApiMetadata): - """Sets the metadata of this ApiDataset. - - - :param metadata: The metadata of this ApiDataset. - :type metadata: ApiMetadata - """ - - self._metadata = metadata diff --git a/api/server/swagger_server/models/api_generate_code_response.py b/api/server/swagger_server/models/api_generate_code_response.py deleted file mode 100644 index 2110d295..00000000 --- a/api/server/swagger_server/models/api_generate_code_response.py +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiGenerateCodeResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, script: str=None): # noqa: E501 - """ApiGenerateCodeResponse - a model defined in Swagger - - :param script: The script of this ApiGenerateCodeResponse. # noqa: E501 - :type script: str - """ - self.swagger_types = { - 'script': str - } - - self.attribute_map = { - 'script': 'script' - } - - self._script = script - - @classmethod - def from_dict(cls, dikt) -> 'ApiGenerateCodeResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiGenerateCodeResponse of this ApiGenerateCodeResponse. # noqa: E501 - :rtype: ApiGenerateCodeResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def script(self) -> str: - """Gets the script of this ApiGenerateCodeResponse. - - The script source code to run the component in a pipeline # noqa: E501 - - :return: The script of this ApiGenerateCodeResponse. - :rtype: str - """ - return self._script - - @script.setter - def script(self, script: str): - """Sets the script of this ApiGenerateCodeResponse. - - The script source code to run the component in a pipeline # noqa: E501 - - :param script: The script of this ApiGenerateCodeResponse. - :type script: str - """ - - self._script = script diff --git a/api/server/swagger_server/models/api_generate_model_code_response.py b/api/server/swagger_server/models/api_generate_model_code_response.py deleted file mode 100644 index 3b209711..00000000 --- a/api/server/swagger_server/models/api_generate_model_code_response.py +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_model_script import ApiModelScript # noqa: F401,E501 -from swagger_server import util - - -class ApiGenerateModelCodeResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, scripts: List[ApiModelScript]=None): # noqa: E501 - """ApiGenerateModelCodeResponse - a model defined in Swagger - - :param scripts: The scripts of this ApiGenerateModelCodeResponse. # noqa: E501 - :type scripts: List[ApiModelScript] - """ - self.swagger_types = { - 'scripts': List[ApiModelScript] - } - - self.attribute_map = { - 'scripts': 'scripts' - } - - self._scripts = scripts - - @classmethod - def from_dict(cls, dikt) -> 'ApiGenerateModelCodeResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiGenerateModelCodeResponse of this ApiGenerateModelCodeResponse. # noqa: E501 - :rtype: ApiGenerateModelCodeResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def scripts(self) -> List[ApiModelScript]: - """Gets the scripts of this ApiGenerateModelCodeResponse. - - The source code samples to use the model in a pipeline # noqa: E501 - - :return: The scripts of this ApiGenerateModelCodeResponse. - :rtype: List[ApiModelScript] - """ - return self._scripts - - @scripts.setter - def scripts(self, scripts: List[ApiModelScript]): - """Sets the scripts of this ApiGenerateModelCodeResponse. - - The source code samples to use the model in a pipeline # noqa: E501 - - :param scripts: The scripts of this ApiGenerateModelCodeResponse. - :type scripts: List[ApiModelScript] - """ - - self._scripts = scripts diff --git a/api/server/swagger_server/models/api_get_template_response.py b/api/server/swagger_server/models/api_get_template_response.py deleted file mode 100644 index adf1103a..00000000 --- a/api/server/swagger_server/models/api_get_template_response.py +++ /dev/null @@ -1,97 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiGetTemplateResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, template: str=None, url: str=None): # noqa: E501 - """ApiGetTemplateResponse - a model defined in Swagger - - :param template: The template of this ApiGetTemplateResponse. # noqa: E501 - :type template: str - :param url: The url of this ApiGetTemplateResponse. # noqa: E501 - :type url: str - """ - self.swagger_types = { - 'template': str, - 'url': str - } - - self.attribute_map = { - 'template': 'template', - 'url': 'url' - } - - self._template = template - self._url = url - - @classmethod - def from_dict(cls, dikt) -> 'ApiGetTemplateResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiGetTemplateResponse of this ApiGetTemplateResponse. # noqa: E501 - :rtype: ApiGetTemplateResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def template(self) -> str: - """Gets the template of this ApiGetTemplateResponse. - - The YAML template file content # noqa: E501 - - :return: The template of this ApiGetTemplateResponse. - :rtype: str - """ - return self._template - - @template.setter - def template(self, template: str): - """Sets the template of this ApiGetTemplateResponse. - - The YAML template file content # noqa: E501 - - :param template: The template of this ApiGetTemplateResponse. - :type template: str - """ - - self._template = template - - @property - def url(self) -> str: - """Gets the url of this ApiGetTemplateResponse. - - The URL to download the template text from S3 storage (Minio) # noqa: E501 - - :return: The url of this ApiGetTemplateResponse. - :rtype: str - """ - return self._url - - @url.setter - def url(self, url: str): - """Sets the url of this ApiGetTemplateResponse. - - The URL to download the template text from S3 storage (Minio) # noqa: E501 - - :param url: The url of this ApiGetTemplateResponse. - :type url: str - """ - - self._url = url diff --git a/api/server/swagger_server/models/api_inferenceservice.py b/api/server/swagger_server/models/api_inferenceservice.py deleted file mode 100644 index 74f78a07..00000000 --- a/api/server/swagger_server/models/api_inferenceservice.py +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.any_value import AnyValue # noqa: F401,E501 -from swagger_server import util - - -class ApiInferenceservice(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, api_version: str=None, kind: str=None, metadata: AnyValue=None, spec: AnyValue=None): # noqa: E501 - """ApiInferenceservice - a model defined in Swagger - - :param api_version: The api_version of this ApiInferenceservice. # noqa: E501 - :type api_version: str - :param kind: The kind of this ApiInferenceservice. # noqa: E501 - :type kind: str - :param metadata: The metadata of this ApiInferenceservice. # noqa: E501 - :type metadata: AnyValue - :param spec: The spec of this ApiInferenceservice. # noqa: E501 - :type spec: AnyValue - """ - self.swagger_types = { - 'api_version': str, - 'kind': str, - 'metadata': AnyValue, - 'spec': AnyValue - } - - self.attribute_map = { - 'api_version': 'apiVersion', - 'kind': 'kind', - 'metadata': 'metadata', - 'spec': 'spec' - } - - self._api_version = api_version - self._kind = kind - self._metadata = metadata - self._spec = spec - - @classmethod - def from_dict(cls, dikt) -> 'ApiInferenceservice': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiInferenceservice of this ApiInferenceservice. # noqa: E501 - :rtype: ApiInferenceservice - """ - return util.deserialize_model(dikt, cls) - - @property - def api_version(self) -> str: - """Gets the api_version of this ApiInferenceservice. - - - :return: The api_version of this ApiInferenceservice. - :rtype: str - """ - return self._api_version - - @api_version.setter - def api_version(self, api_version: str): - """Sets the api_version of this ApiInferenceservice. - - - :param api_version: The api_version of this ApiInferenceservice. - :type api_version: str - """ - if api_version is None: - raise ValueError("Invalid value for `api_version`, must not be `None`") # noqa: E501 - - self._api_version = api_version - - @property - def kind(self) -> str: - """Gets the kind of this ApiInferenceservice. - - - :return: The kind of this ApiInferenceservice. - :rtype: str - """ - return self._kind - - @kind.setter - def kind(self, kind: str): - """Sets the kind of this ApiInferenceservice. - - - :param kind: The kind of this ApiInferenceservice. - :type kind: str - """ - if kind is None: - raise ValueError("Invalid value for `kind`, must not be `None`") # noqa: E501 - - self._kind = kind - - @property - def metadata(self) -> AnyValue: - """Gets the metadata of this ApiInferenceservice. - - - :return: The metadata of this ApiInferenceservice. - :rtype: AnyValue - """ - return self._metadata - - @metadata.setter - def metadata(self, metadata: AnyValue): - """Sets the metadata of this ApiInferenceservice. - - - :param metadata: The metadata of this ApiInferenceservice. - :type metadata: AnyValue - """ - - self._metadata = metadata - - @property - def spec(self) -> AnyValue: - """Gets the spec of this ApiInferenceservice. - - - :return: The spec of this ApiInferenceservice. - :rtype: AnyValue - """ - return self._spec - - @spec.setter - def spec(self, spec: AnyValue): - """Sets the spec of this ApiInferenceservice. - - - :param spec: The spec of this ApiInferenceservice. - :type spec: AnyValue - """ - - self._spec = spec diff --git a/api/server/swagger_server/models/api_list_catalog_items_response.py b/api/server/swagger_server/models/api_list_catalog_items_response.py deleted file mode 100644 index cc52ed9d..00000000 --- a/api/server/swagger_server/models/api_list_catalog_items_response.py +++ /dev/null @@ -1,228 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.api_component import ApiComponent -from swagger_server.models.api_dataset import ApiDataset -from swagger_server.models.api_model import ApiModel -from swagger_server.models.api_notebook import ApiNotebook -from swagger_server.models.api_pipeline import ApiPipeline -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiListCatalogItemsResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, components: List[ApiComponent]=None, datasets: List[ApiDataset]=None, models: List[ApiModel]=None, notebooks: List[ApiNotebook]=None, pipelines: List[ApiPipeline]=None, total_size: int=None, next_page_token: str=None): # noqa: E501 - """ApiListCatalogItemsResponse - a model defined in Swagger - - :param components: The components of this ApiListCatalogItemsResponse. # noqa: E501 - :type components: List[ApiComponent] - :param datasets: The datasets of this ApiListCatalogItemsResponse. # noqa: E501 - :type datasets: List[ApiDataset] - :param models: The models of this ApiListCatalogItemsResponse. # noqa: E501 - :type models: List[ApiModel] - :param notebooks: The notebooks of this ApiListCatalogItemsResponse. # noqa: E501 - :type notebooks: List[ApiNotebook] - :param pipelines: The pipelines of this ApiListCatalogItemsResponse. # noqa: E501 - :type pipelines: List[ApiPipeline] - :param total_size: The total_size of this ApiListCatalogItemsResponse. # noqa: E501 - :type total_size: int - :param next_page_token: The next_page_token of this ApiListCatalogItemsResponse. # noqa: E501 - :type next_page_token: str - """ - self.swagger_types = { - 'components': List[ApiComponent], - 'datasets': List[ApiDataset], - 'models': List[ApiModel], - 'notebooks': List[ApiNotebook], - 'pipelines': List[ApiPipeline], - 'total_size': int, - 'next_page_token': str - } - - self.attribute_map = { - 'components': 'components', - 'datasets': 'datasets', - 'models': 'models', - 'notebooks': 'notebooks', - 'pipelines': 'pipelines', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - self._components = components - self._datasets = datasets - self._models = models - self._notebooks = notebooks - self._pipelines = pipelines - self._total_size = total_size - self._next_page_token = next_page_token - - @classmethod - def from_dict(cls, dikt) -> 'ApiListCatalogItemsResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiListCatalogItemsResponse of this ApiListCatalogItemsResponse. # noqa: E501 - :rtype: ApiListCatalogItemsResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def components(self) -> List[ApiComponent]: - """Gets the components of this ApiListCatalogItemsResponse. - - - :return: The components of this ApiListCatalogItemsResponse. - :rtype: List[ApiComponent] - """ - return self._components - - @components.setter - def components(self, components: List[ApiComponent]): - """Sets the components of this ApiListCatalogItemsResponse. - - - :param components: The components of this ApiListCatalogItemsResponse. - :type components: List[ApiComponent] - """ - - self._components = components - - @property - def datasets(self) -> List[ApiDataset]: - """Gets the datasets of this ApiListCatalogItemsResponse. - - - :return: The datasets of this ApiListCatalogItemsResponse. - :rtype: List[ApiDataset] - """ - return self._datasets - - @datasets.setter - def datasets(self, datasets: List[ApiDataset]): - """Sets the datasets of this ApiListCatalogItemsResponse. - - - :param datasets: The datasets of this ApiListCatalogItemsResponse. - :type datasets: List[ApiDataset] - """ - - self._datasets = datasets - - @property - def models(self) -> List[ApiModel]: - """Gets the models of this ApiListCatalogItemsResponse. - - - :return: The models of this ApiListCatalogItemsResponse. - :rtype: List[ApiModel] - """ - return self._models - - @models.setter - def models(self, models: List[ApiModel]): - """Sets the models of this ApiListCatalogItemsResponse. - - - :param models: The models of this ApiListCatalogItemsResponse. - :type models: List[ApiModel] - """ - - self._models = models - - @property - def notebooks(self) -> List[ApiNotebook]: - """Gets the notebooks of this ApiListCatalogItemsResponse. - - - :return: The notebooks of this ApiListCatalogItemsResponse. - :rtype: List[ApiNotebook] - """ - return self._notebooks - - @notebooks.setter - def notebooks(self, notebooks: List[ApiNotebook]): - """Sets the notebooks of this ApiListCatalogItemsResponse. - - - :param notebooks: The notebooks of this ApiListCatalogItemsResponse. - :type notebooks: List[ApiNotebook] - """ - - self._notebooks = notebooks - - @property - def pipelines(self) -> List[ApiPipeline]: - """Gets the pipelines of this ApiListCatalogItemsResponse. - - - :return: The pipelines of this ApiListCatalogItemsResponse. - :rtype: List[ApiPipeline] - """ - return self._pipelines - - @pipelines.setter - def pipelines(self, pipelines: List[ApiPipeline]): - """Sets the pipelines of this ApiListCatalogItemsResponse. - - - :param pipelines: The pipelines of this ApiListCatalogItemsResponse. - :type pipelines: List[ApiPipeline] - """ - - self._pipelines = pipelines - - @property - def total_size(self) -> int: - """Gets the total_size of this ApiListCatalogItemsResponse. - - - :return: The total_size of this ApiListCatalogItemsResponse. - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size: int): - """Sets the total_size of this ApiListCatalogItemsResponse. - - - :param total_size: The total_size of this ApiListCatalogItemsResponse. - :type total_size: int - """ - - self._total_size = total_size - - @property - def next_page_token(self) -> str: - """Gets the next_page_token of this ApiListCatalogItemsResponse. - - - :return: The next_page_token of this ApiListCatalogItemsResponse. - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token: str): - """Sets the next_page_token of this ApiListCatalogItemsResponse. - - - :param next_page_token: The next_page_token of this ApiListCatalogItemsResponse. - :type next_page_token: str - """ - - self._next_page_token = next_page_token diff --git a/api/server/swagger_server/models/api_list_catalog_upload_errors.py b/api/server/swagger_server/models/api_list_catalog_upload_errors.py deleted file mode 100644 index c86f076e..00000000 --- a/api/server/swagger_server/models/api_list_catalog_upload_errors.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.api_catalog_upload_error import ApiCatalogUploadError -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiListCatalogUploadErrors(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, errors: List[ApiCatalogUploadError]=None, total_errors: int=None): # noqa: E501 - """ApiListCatalogUploadErrors - a model defined in Swagger - - :param errors: The errors of this ApiListCatalogUploadErrors. # noqa: E501 - :type errors: List[ApiCatalogUploadError] - :param total_errors: The total_errors of this ApiListCatalogUploadErrors. # noqa: E501 - :type total_errors: int - """ - self.swagger_types = { - 'errors': List[ApiCatalogUploadError], - 'total_errors': int - } - - self.attribute_map = { - 'errors': 'errors', - 'total_errors': 'total_errors' - } - - self._errors = errors - self._total_errors = total_errors - - @classmethod - def from_dict(cls, dikt) -> 'ApiListCatalogUploadErrors': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiListCatalogUploadErrors of this ApiListCatalogUploadErrors. # noqa: E501 - :rtype: ApiListCatalogUploadErrors - """ - return util.deserialize_model(dikt, cls) - - @property - def errors(self) -> List[ApiCatalogUploadError]: - """Gets the errors of this ApiListCatalogUploadErrors. - - - :return: The errors of this ApiListCatalogUploadErrors. - :rtype: List[ApiCatalogUploadError] - """ - return self._errors - - @errors.setter - def errors(self, errors: List[ApiCatalogUploadError]): - """Sets the errors of this ApiListCatalogUploadErrors. - - - :param errors: The errors of this ApiListCatalogUploadErrors. - :type errors: List[ApiCatalogUploadError] - """ - - self._errors = errors - - @property - def total_errors(self) -> int: - """Gets the total_errors of this ApiListCatalogUploadErrors. - - - :return: The total_errors of this ApiListCatalogUploadErrors. - :rtype: int - """ - return self._total_errors - - @total_errors.setter - def total_errors(self, total_errors: int): - """Sets the total_errors of this ApiListCatalogUploadErrors. - - - :param total_errors: The total_errors of this ApiListCatalogUploadErrors. - :type total_errors: int - """ - - self._total_errors = total_errors diff --git a/api/server/swagger_server/models/api_list_components_response.py b/api/server/swagger_server/models/api_list_components_response.py deleted file mode 100644 index 2ec60810..00000000 --- a/api/server/swagger_server/models/api_list_components_response.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_component import ApiComponent # noqa: F401,E501 -from swagger_server import util - - -class ApiListComponentsResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, components: List[ApiComponent]=None, total_size: int=None, next_page_token: str=None): # noqa: E501 - """ApiListComponentsResponse - a model defined in Swagger - - :param components: The components of this ApiListComponentsResponse. # noqa: E501 - :type components: List[ApiComponent] - :param total_size: The total_size of this ApiListComponentsResponse. # noqa: E501 - :type total_size: int - :param next_page_token: The next_page_token of this ApiListComponentsResponse. # noqa: E501 - :type next_page_token: str - """ - self.swagger_types = { - 'components': List[ApiComponent], - 'total_size': int, - 'next_page_token': str - } - - self.attribute_map = { - 'components': 'components', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - self._components = components - self._total_size = total_size - self._next_page_token = next_page_token - - @classmethod - def from_dict(cls, dikt) -> 'ApiListComponentsResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiListComponentsResponse of this ApiListComponentsResponse. # noqa: E501 - :rtype: ApiListComponentsResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def components(self) -> List[ApiComponent]: - """Gets the components of this ApiListComponentsResponse. - - - :return: The components of this ApiListComponentsResponse. - :rtype: List[ApiComponent] - """ - return self._components - - @components.setter - def components(self, components: List[ApiComponent]): - """Sets the components of this ApiListComponentsResponse. - - - :param components: The components of this ApiListComponentsResponse. - :type components: List[ApiComponent] - """ - - self._components = components - - @property - def total_size(self) -> int: - """Gets the total_size of this ApiListComponentsResponse. - - - :return: The total_size of this ApiListComponentsResponse. - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size: int): - """Sets the total_size of this ApiListComponentsResponse. - - - :param total_size: The total_size of this ApiListComponentsResponse. - :type total_size: int - """ - - self._total_size = total_size - - @property - def next_page_token(self) -> str: - """Gets the next_page_token of this ApiListComponentsResponse. - - - :return: The next_page_token of this ApiListComponentsResponse. - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token: str): - """Sets the next_page_token of this ApiListComponentsResponse. - - - :param next_page_token: The next_page_token of this ApiListComponentsResponse. - :type next_page_token: str - """ - - self._next_page_token = next_page_token diff --git a/api/server/swagger_server/models/api_list_credentials_response.py b/api/server/swagger_server/models/api_list_credentials_response.py deleted file mode 100644 index db03ba62..00000000 --- a/api/server/swagger_server/models/api_list_credentials_response.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_credential import ApiCredential # noqa: F401,E501 -from swagger_server import util - - -class ApiListCredentialsResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, credentials: List[ApiCredential]=None, total_size: int=None, next_page_token: str=None): # noqa: E501 - """ApiListCredentialsResponse - a model defined in Swagger - - :param credentials: The credentials of this ApiListCredentialsResponse. # noqa: E501 - :type credentials: List[ApiCredential] - :param total_size: The total_size of this ApiListCredentialsResponse. # noqa: E501 - :type total_size: int - :param next_page_token: The next_page_token of this ApiListCredentialsResponse. # noqa: E501 - :type next_page_token: str - """ - self.swagger_types = { - 'credentials': List[ApiCredential], - 'total_size': int, - 'next_page_token': str - } - - self.attribute_map = { - 'credentials': 'credentials', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - self._credentials = credentials - self._total_size = total_size - self._next_page_token = next_page_token - - @classmethod - def from_dict(cls, dikt) -> 'ApiListCredentialsResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiListCredentialsResponse of this ApiListCredentialsResponse. # noqa: E501 - :rtype: ApiListCredentialsResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def credentials(self) -> List[ApiCredential]: - """Gets the credentials of this ApiListCredentialsResponse. - - - :return: The credentials of this ApiListCredentialsResponse. - :rtype: List[ApiCredential] - """ - return self._credentials - - @credentials.setter - def credentials(self, credentials: List[ApiCredential]): - """Sets the credentials of this ApiListCredentialsResponse. - - - :param credentials: The credentials of this ApiListCredentialsResponse. - :type credentials: List[ApiCredential] - """ - - self._credentials = credentials - - @property - def total_size(self) -> int: - """Gets the total_size of this ApiListCredentialsResponse. - - - :return: The total_size of this ApiListCredentialsResponse. - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size: int): - """Sets the total_size of this ApiListCredentialsResponse. - - - :param total_size: The total_size of this ApiListCredentialsResponse. - :type total_size: int - """ - - self._total_size = total_size - - @property - def next_page_token(self) -> str: - """Gets the next_page_token of this ApiListCredentialsResponse. - - - :return: The next_page_token of this ApiListCredentialsResponse. - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token: str): - """Sets the next_page_token of this ApiListCredentialsResponse. - - - :param next_page_token: The next_page_token of this ApiListCredentialsResponse. - :type next_page_token: str - """ - - self._next_page_token = next_page_token diff --git a/api/server/swagger_server/models/api_list_datasets_response.py b/api/server/swagger_server/models/api_list_datasets_response.py deleted file mode 100644 index 16c11c39..00000000 --- a/api/server/swagger_server/models/api_list_datasets_response.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_dataset import ApiDataset # noqa: F401,E501 -from swagger_server import util - - -class ApiListDatasetsResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, datasets: List[ApiDataset]=None, total_size: int=None, next_page_token: str=None): # noqa: E501 - """ApiListDatasetsResponse - a model defined in Swagger - - :param datasets: The datasets of this ApiListDatasetsResponse. # noqa: E501 - :type datasets: List[ApiDataset] - :param total_size: The total_size of this ApiListDatasetsResponse. # noqa: E501 - :type total_size: int - :param next_page_token: The next_page_token of this ApiListDatasetsResponse. # noqa: E501 - :type next_page_token: str - """ - self.swagger_types = { - 'datasets': List[ApiDataset], - 'total_size': int, - 'next_page_token': str - } - - self.attribute_map = { - 'datasets': 'datasets', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - self._datasets = datasets - self._total_size = total_size - self._next_page_token = next_page_token - - @classmethod - def from_dict(cls, dikt) -> 'ApiListDatasetsResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiListDatasetsResponse of this ApiListDatasetsResponse. # noqa: E501 - :rtype: ApiListDatasetsResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def datasets(self) -> List[ApiDataset]: - """Gets the datasets of this ApiListDatasetsResponse. - - - :return: The datasets of this ApiListDatasetsResponse. - :rtype: List[ApiDataset] - """ - return self._datasets - - @datasets.setter - def datasets(self, datasets: List[ApiDataset]): - """Sets the datasets of this ApiListDatasetsResponse. - - - :param datasets: The datasets of this ApiListDatasetsResponse. - :type datasets: List[ApiDataset] - """ - - self._datasets = datasets - - @property - def total_size(self) -> int: - """Gets the total_size of this ApiListDatasetsResponse. - - - :return: The total_size of this ApiListDatasetsResponse. - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size: int): - """Sets the total_size of this ApiListDatasetsResponse. - - - :param total_size: The total_size of this ApiListDatasetsResponse. - :type total_size: int - """ - - self._total_size = total_size - - @property - def next_page_token(self) -> str: - """Gets the next_page_token of this ApiListDatasetsResponse. - - - :return: The next_page_token of this ApiListDatasetsResponse. - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token: str): - """Sets the next_page_token of this ApiListDatasetsResponse. - - - :param next_page_token: The next_page_token of this ApiListDatasetsResponse. - :type next_page_token: str - """ - - self._next_page_token = next_page_token diff --git a/api/server/swagger_server/models/api_list_inferenceservices_response.py b/api/server/swagger_server/models/api_list_inferenceservices_response.py deleted file mode 100644 index 5b188c71..00000000 --- a/api/server/swagger_server/models/api_list_inferenceservices_response.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_inferenceservice import ApiInferenceservice # noqa: F401,E501 -from swagger_server import util - - -class ApiListInferenceservicesResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, inferenceservices: List[ApiInferenceservice]=None, total_size: int=None, next_page_token: str=None): # noqa: E501 - """ApiListInferenceservicesResponse - a model defined in Swagger - - :param inferenceservices: The inferenceservices of this ApiListInferenceservicesResponse. # noqa: E501 - :type inferenceservices: List[ApiInferenceservice] - :param total_size: The total_size of this ApiListInferenceservicesResponse. # noqa: E501 - :type total_size: int - :param next_page_token: The next_page_token of this ApiListInferenceservicesResponse. # noqa: E501 - :type next_page_token: str - """ - self.swagger_types = { - 'inferenceservices': List[ApiInferenceservice], - 'total_size': int, - 'next_page_token': str - } - - self.attribute_map = { - 'inferenceservices': 'Inferenceservices', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - self._inferenceservices = inferenceservices - self._total_size = total_size - self._next_page_token = next_page_token - - @classmethod - def from_dict(cls, dikt) -> 'ApiListInferenceservicesResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiListInferenceservicesResponse of this ApiListInferenceservicesResponse. # noqa: E501 - :rtype: ApiListInferenceservicesResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def inferenceservices(self) -> List[ApiInferenceservice]: - """Gets the inferenceservices of this ApiListInferenceservicesResponse. - - - :return: The inferenceservices of this ApiListInferenceservicesResponse. - :rtype: List[ApiInferenceservice] - """ - return self._inferenceservices - - @inferenceservices.setter - def inferenceservices(self, inferenceservices: List[ApiInferenceservice]): - """Sets the inferenceservices of this ApiListInferenceservicesResponse. - - - :param inferenceservices: The inferenceservices of this ApiListInferenceservicesResponse. - :type inferenceservices: List[ApiInferenceservice] - """ - - self._inferenceservices = inferenceservices - - @property - def total_size(self) -> int: - """Gets the total_size of this ApiListInferenceservicesResponse. - - - :return: The total_size of this ApiListInferenceservicesResponse. - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size: int): - """Sets the total_size of this ApiListInferenceservicesResponse. - - - :param total_size: The total_size of this ApiListInferenceservicesResponse. - :type total_size: int - """ - - self._total_size = total_size - - @property - def next_page_token(self) -> str: - """Gets the next_page_token of this ApiListInferenceservicesResponse. - - - :return: The next_page_token of this ApiListInferenceservicesResponse. - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token: str): - """Sets the next_page_token of this ApiListInferenceservicesResponse. - - - :param next_page_token: The next_page_token of this ApiListInferenceservicesResponse. - :type next_page_token: str - """ - - self._next_page_token = next_page_token diff --git a/api/server/swagger_server/models/api_list_models_response.py b/api/server/swagger_server/models/api_list_models_response.py deleted file mode 100644 index e59e2028..00000000 --- a/api/server/swagger_server/models/api_list_models_response.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_model import ApiModel # noqa: F401,E501 -from swagger_server import util - - -class ApiListModelsResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, models: List[ApiModel]=None, total_size: int=None, next_page_token: str=None): # noqa: E501 - """ApiListModelsResponse - a model defined in Swagger - - :param models: The models of this ApiListModelsResponse. # noqa: E501 - :type models: List[ApiModel] - :param total_size: The total_size of this ApiListModelsResponse. # noqa: E501 - :type total_size: int - :param next_page_token: The next_page_token of this ApiListModelsResponse. # noqa: E501 - :type next_page_token: str - """ - self.swagger_types = { - 'models': List[ApiModel], - 'total_size': int, - 'next_page_token': str - } - - self.attribute_map = { - 'models': 'models', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - self._models = models - self._total_size = total_size - self._next_page_token = next_page_token - - @classmethod - def from_dict(cls, dikt) -> 'ApiListModelsResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiListModelsResponse of this ApiListModelsResponse. # noqa: E501 - :rtype: ApiListModelsResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def models(self) -> List[ApiModel]: - """Gets the models of this ApiListModelsResponse. - - - :return: The models of this ApiListModelsResponse. - :rtype: List[ApiModel] - """ - return self._models - - @models.setter - def models(self, models: List[ApiModel]): - """Sets the models of this ApiListModelsResponse. - - - :param models: The models of this ApiListModelsResponse. - :type models: List[ApiModel] - """ - - self._models = models - - @property - def total_size(self) -> int: - """Gets the total_size of this ApiListModelsResponse. - - - :return: The total_size of this ApiListModelsResponse. - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size: int): - """Sets the total_size of this ApiListModelsResponse. - - - :param total_size: The total_size of this ApiListModelsResponse. - :type total_size: int - """ - - self._total_size = total_size - - @property - def next_page_token(self) -> str: - """Gets the next_page_token of this ApiListModelsResponse. - - - :return: The next_page_token of this ApiListModelsResponse. - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token: str): - """Sets the next_page_token of this ApiListModelsResponse. - - - :param next_page_token: The next_page_token of this ApiListModelsResponse. - :type next_page_token: str - """ - - self._next_page_token = next_page_token diff --git a/api/server/swagger_server/models/api_list_notebooks_response.py b/api/server/swagger_server/models/api_list_notebooks_response.py deleted file mode 100644 index 4291edbe..00000000 --- a/api/server/swagger_server/models/api_list_notebooks_response.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_notebook import ApiNotebook # noqa: F401,E501 -from swagger_server import util - - -class ApiListNotebooksResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, notebooks: List[ApiNotebook]=None, total_size: int=None, next_page_token: str=None): # noqa: E501 - """ApiListNotebooksResponse - a model defined in Swagger - - :param notebooks: The notebooks of this ApiListNotebooksResponse. # noqa: E501 - :type notebooks: List[ApiNotebook] - :param total_size: The total_size of this ApiListNotebooksResponse. # noqa: E501 - :type total_size: int - :param next_page_token: The next_page_token of this ApiListNotebooksResponse. # noqa: E501 - :type next_page_token: str - """ - self.swagger_types = { - 'notebooks': List[ApiNotebook], - 'total_size': int, - 'next_page_token': str - } - - self.attribute_map = { - 'notebooks': 'notebooks', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - self._notebooks = notebooks - self._total_size = total_size - self._next_page_token = next_page_token - - @classmethod - def from_dict(cls, dikt) -> 'ApiListNotebooksResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiListNotebooksResponse of this ApiListNotebooksResponse. # noqa: E501 - :rtype: ApiListNotebooksResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def notebooks(self) -> List[ApiNotebook]: - """Gets the notebooks of this ApiListNotebooksResponse. - - - :return: The notebooks of this ApiListNotebooksResponse. - :rtype: List[ApiNotebook] - """ - return self._notebooks - - @notebooks.setter - def notebooks(self, notebooks: List[ApiNotebook]): - """Sets the notebooks of this ApiListNotebooksResponse. - - - :param notebooks: The notebooks of this ApiListNotebooksResponse. - :type notebooks: List[ApiNotebook] - """ - - self._notebooks = notebooks - - @property - def total_size(self) -> int: - """Gets the total_size of this ApiListNotebooksResponse. - - - :return: The total_size of this ApiListNotebooksResponse. - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size: int): - """Sets the total_size of this ApiListNotebooksResponse. - - - :param total_size: The total_size of this ApiListNotebooksResponse. - :type total_size: int - """ - - self._total_size = total_size - - @property - def next_page_token(self) -> str: - """Gets the next_page_token of this ApiListNotebooksResponse. - - - :return: The next_page_token of this ApiListNotebooksResponse. - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token: str): - """Sets the next_page_token of this ApiListNotebooksResponse. - - - :param next_page_token: The next_page_token of this ApiListNotebooksResponse. - :type next_page_token: str - """ - - self._next_page_token = next_page_token diff --git a/api/server/swagger_server/models/api_list_pipelines_response.py b/api/server/swagger_server/models/api_list_pipelines_response.py deleted file mode 100644 index 01b809f9..00000000 --- a/api/server/swagger_server/models/api_list_pipelines_response.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_pipeline_extended import ApiPipelineExtended # noqa: F401,E501 -from swagger_server import util - - -class ApiListPipelinesResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, pipelines: List[ApiPipelineExtended]=None, total_size: int=None, next_page_token: str=None): # noqa: E501 - """ApiListPipelinesResponse - a model defined in Swagger - - :param pipelines: The pipelines of this ApiListPipelinesResponse. # noqa: E501 - :type pipelines: List[ApiPipelineExtended] - :param total_size: The total_size of this ApiListPipelinesResponse. # noqa: E501 - :type total_size: int - :param next_page_token: The next_page_token of this ApiListPipelinesResponse. # noqa: E501 - :type next_page_token: str - """ - self.swagger_types = { - 'pipelines': List[ApiPipelineExtended], - 'total_size': int, - 'next_page_token': str - } - - self.attribute_map = { - 'pipelines': 'pipelines', - 'total_size': 'total_size', - 'next_page_token': 'next_page_token' - } - - self._pipelines = pipelines - self._total_size = total_size - self._next_page_token = next_page_token - - @classmethod - def from_dict(cls, dikt) -> 'ApiListPipelinesResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiListPipelinesResponse of this ApiListPipelinesResponse. # noqa: E501 - :rtype: ApiListPipelinesResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def pipelines(self) -> List[ApiPipelineExtended]: - """Gets the pipelines of this ApiListPipelinesResponse. - - - :return: The pipelines of this ApiListPipelinesResponse. - :rtype: List[ApiPipelineExtended] - """ - return self._pipelines - - @pipelines.setter - def pipelines(self, pipelines: List[ApiPipelineExtended]): - """Sets the pipelines of this ApiListPipelinesResponse. - - - :param pipelines: The pipelines of this ApiListPipelinesResponse. - :type pipelines: List[ApiPipelineExtended] - """ - - self._pipelines = pipelines - - @property - def total_size(self) -> int: - """Gets the total_size of this ApiListPipelinesResponse. - - - :return: The total_size of this ApiListPipelinesResponse. - :rtype: int - """ - return self._total_size - - @total_size.setter - def total_size(self, total_size: int): - """Sets the total_size of this ApiListPipelinesResponse. - - - :param total_size: The total_size of this ApiListPipelinesResponse. - :type total_size: int - """ - - self._total_size = total_size - - @property - def next_page_token(self) -> str: - """Gets the next_page_token of this ApiListPipelinesResponse. - - - :return: The next_page_token of this ApiListPipelinesResponse. - :rtype: str - """ - return self._next_page_token - - @next_page_token.setter - def next_page_token(self, next_page_token: str): - """Sets the next_page_token of this ApiListPipelinesResponse. - - - :param next_page_token: The next_page_token of this ApiListPipelinesResponse. - :type next_page_token: str - """ - - self._next_page_token = next_page_token diff --git a/api/server/swagger_server/models/api_metadata.py b/api/server/swagger_server/models/api_metadata.py deleted file mode 100644 index 2d4a11b6..00000000 --- a/api/server/swagger_server/models/api_metadata.py +++ /dev/null @@ -1,119 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiMetadata(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, annotations: Dict[str, str]=None, labels: Dict[str, str]=None, tags: List[str]=None): # noqa: E501 - """ApiMetadata - a model defined in Swagger - - :param annotations: The annotations of this ApiMetadata. # noqa: E501 - :type annotations: Dict[str, str] - :param labels: The labels of this ApiMetadata. # noqa: E501 - :type labels: Dict[str, str] - :param tags: The tags of this ApiMetadata. # noqa: E501 - :type tags: List[str] - """ - self.swagger_types = { - 'annotations': Dict[str, str], - 'labels': Dict[str, str], - 'tags': List[str] - } - - self.attribute_map = { - 'annotations': 'annotations', - 'labels': 'labels', - 'tags': 'tags' - } - - self._annotations = annotations - self._labels = labels - self._tags = tags - - @classmethod - def from_dict(cls, dikt) -> 'ApiMetadata': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiMetadata of this ApiMetadata. # noqa: E501 - :rtype: ApiMetadata - """ - return util.deserialize_model(dikt, cls) - - @property - def annotations(self) -> Dict[str, str]: - """Gets the annotations of this ApiMetadata. - - - :return: The annotations of this ApiMetadata. - :rtype: Dict[str, str] - """ - return self._annotations - - @annotations.setter - def annotations(self, annotations: Dict[str, str]): - """Sets the annotations of this ApiMetadata. - - - :param annotations: The annotations of this ApiMetadata. - :type annotations: Dict[str, str] - """ - - self._annotations = annotations - - @property - def labels(self) -> Dict[str, str]: - """Gets the labels of this ApiMetadata. - - - :return: The labels of this ApiMetadata. - :rtype: Dict[str, str] - """ - return self._labels - - @labels.setter - def labels(self, labels: Dict[str, str]): - """Sets the labels of this ApiMetadata. - - - :param labels: The labels of this ApiMetadata. - :type labels: Dict[str, str] - """ - - self._labels = labels - - @property - def tags(self) -> List[str]: - """Gets the tags of this ApiMetadata. - - - :return: The tags of this ApiMetadata. - :rtype: List[str] - """ - return self._tags - - @tags.setter - def tags(self, tags: List[str]): - """Sets the tags of this ApiMetadata. - - - :param tags: The tags of this ApiMetadata. - :type tags: List[str] - """ - - self._tags = tags diff --git a/api/server/swagger_server/models/api_model.py b/api/server/swagger_server/models/api_model.py deleted file mode 100644 index 1061151b..00000000 --- a/api/server/swagger_server/models/api_model.py +++ /dev/null @@ -1,543 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.api_asset import ApiAsset -from swagger_server.models.api_model_framework import ApiModelFramework # noqa: F401,E501 -from swagger_server.models.api_parameter import ApiParameter # noqa: F401,E501 -from swagger_server import util - - -class ApiModel(ApiAsset): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, id: str=None, created_at: datetime=None, name: str=None, description: str=None, featured: bool=None, publish_approved: bool=None, related_assets: List[str]=None, filter_categories: Dict[str, str]=None, domain: str=None, labels: Dict[str, str]=None, framework: ApiModelFramework=None, trainable: bool=None, trainable_tested_platforms: List[str]=None, trainable_credentials_required: bool=None, trainable_parameters: List[ApiParameter]=None, servable: bool=None, servable_tested_platforms: List[str]=None, servable_credentials_required: bool=None, servable_parameters: List[ApiParameter]=None): # noqa: E501 - """ApiModel - a model defined in Swagger - - :param id: The id of this ApiModel. # noqa: E501 - :type id: str - :param created_at: The created_at of this ApiModel. # noqa: E501 - :type created_at: datetime - :param name: The name of this ApiModel. # noqa: E501 - :type name: str - :param description: The description of this ApiModel. # noqa: E501 - :type description: str - :param featured: The featured of this ApiModel. # noqa: E501 - :type featured: bool - :param publish_approved: The publish_approved of this ApiModel. # noqa: E501 - :type publish_approved: bool - :param related_assets: The related_assets of this ApiModel. # noqa: E501 - :type related_assets: List[str] - :param filter_categories: The filter_categories of this ApiModel. # noqa: E501 - :type filter_categories: Dict[str, str] - :param domain: The domain of this ApiModel. # noqa: E501 - :type domain: str - :param labels: The labels of this ApiModel. # noqa: E501 - :type labels: Dict[str, str] - :param framework: The framework of this ApiModel. # noqa: E501 - :type framework: ApiModelFramework - :param trainable: The trainable of this ApiModel. # noqa: E501 - :type trainable: bool - :param trainable_tested_platforms: The trainable_tested_platforms of this ApiModel. # noqa: E501 - :type trainable_tested_platforms: List[str] - :param trainable_credentials_required: The trainable_credentials_required of this ApiModel. # noqa: E501 - :type trainable_credentials_required: bool - :param trainable_parameters: The trainable_parameters of this ApiModel. # noqa: E501 - :type trainable_parameters: List[ApiParameter] - :param servable: The servable of this ApiModel. # noqa: E501 - :type servable: bool - :param servable_tested_platforms: The servable_tested_platforms of this ApiModel. # noqa: E501 - :type servable_tested_platforms: List[str] - :param servable_credentials_required: The servable_credentials_required of this ApiModel. # noqa: E501 - :type servable_credentials_required: bool - :param servable_parameters: The servable_parameters of this ApiModel. # noqa: E501 - :type servable_parameters: List[ApiParameter] - """ - self.swagger_types = { - 'id': str, - 'created_at': datetime, - 'name': str, - 'description': str, - 'featured': bool, - 'publish_approved': bool, - 'related_assets': List[str], - 'filter_categories': Dict[str, str], - 'domain': str, - 'labels': Dict[str, str], - 'framework': ApiModelFramework, - 'trainable': bool, - 'trainable_tested_platforms': List[str], - 'trainable_credentials_required': bool, - 'trainable_parameters': List[ApiParameter], - 'servable': bool, - 'servable_tested_platforms': List[str], - 'servable_credentials_required': bool, - 'servable_parameters': List[ApiParameter] - } - - self.attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'featured': 'featured', - 'publish_approved': 'publish_approved', - 'related_assets': 'related_assets', - 'filter_categories': 'filter_categories', - 'domain': 'domain', - 'labels': 'labels', - 'framework': 'framework', - 'trainable': 'trainable', - 'trainable_tested_platforms': 'trainable_tested_platforms', - 'trainable_credentials_required': 'trainable_credentials_required', - 'trainable_parameters': 'trainable_parameters', - 'servable': 'servable', - 'servable_tested_platforms': 'servable_tested_platforms', - 'servable_credentials_required': 'servable_credentials_required', - 'servable_parameters': 'servable_parameters' - } - - self._id = id - self._created_at = created_at - self._name = name - self._description = description - self._featured = featured - self._publish_approved = publish_approved - self._related_assets = related_assets - self._filter_categories = filter_categories - self._domain = domain - self._labels = labels - self._framework = framework - self._trainable = trainable - self._trainable_tested_platforms = trainable_tested_platforms - self._trainable_credentials_required = trainable_credentials_required - self._trainable_parameters = trainable_parameters - self._servable = servable - self._servable_tested_platforms = servable_tested_platforms - self._servable_credentials_required = servable_credentials_required - self._servable_parameters = servable_parameters - - @classmethod - def from_dict(cls, dikt) -> 'ApiModel': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiModel of this ApiModel. # noqa: E501 - :rtype: ApiModel - """ - return util.deserialize_model(dikt, cls) - - @property - def id(self) -> str: - """Gets the id of this ApiModel. - - - :return: The id of this ApiModel. - :rtype: str - """ - return self._id - - @id.setter - def id(self, id: str): - """Sets the id of this ApiModel. - - - :param id: The id of this ApiModel. - :type id: str - """ - - self._id = id - - @property - def created_at(self) -> datetime: - """Gets the created_at of this ApiModel. - - - :return: The created_at of this ApiModel. - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at: datetime): - """Sets the created_at of this ApiModel. - - - :param created_at: The created_at of this ApiModel. - :type created_at: datetime - """ - - self._created_at = created_at - - @property - def name(self) -> str: - """Gets the name of this ApiModel. - - - :return: The name of this ApiModel. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiModel. - - - :param name: The name of this ApiModel. - :type name: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self) -> str: - """Gets the description of this ApiModel. - - - :return: The description of this ApiModel. - :rtype: str - """ - return self._description - - @description.setter - def description(self, description: str): - """Sets the description of this ApiModel. - - - :param description: The description of this ApiModel. - :type description: str - """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 - - self._description = description - - @property - def featured(self) -> bool: - """Gets the featured of this ApiModel. - - - :return: The featured of this ApiModel. - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured: bool): - """Sets the featured of this ApiModel. - - - :param featured: The featured of this ApiModel. - :type featured: bool - """ - - self._featured = featured - - @property - def publish_approved(self) -> bool: - """Gets the publish_approved of this ApiModel. - - - :return: The publish_approved of this ApiModel. - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved: bool): - """Sets the publish_approved of this ApiModel. - - - :param publish_approved: The publish_approved of this ApiModel. - :type publish_approved: bool - """ - - self._publish_approved = publish_approved - - @property - def related_assets(self) -> List[str]: - """Gets the related_assets of this ApiModel. - - - :return: The related_assets of this ApiModel. - :rtype: List[str] - """ - return self._related_assets - - @related_assets.setter - def related_assets(self, related_assets: List[str]): - """Sets the related_assets of this ApiModel. - - - :param related_assets: The related_assets of this ApiModel. - :type related_assets: List[str] - """ - - self._related_assets = related_assets - - @property - def filter_categories(self) -> Dict[str, str]: - """Gets the filter_categories of this ApiModel. - - - :return: The filter_categories of this ApiModel. - :rtype: Dict[str, str] - """ - return self._filter_categories - - @filter_categories.setter - def filter_categories(self, filter_categories: Dict[str, str]): - """Sets the filter_categories of this ApiModel. - - - :param filter_categories: The filter_categories of this ApiModel. - :type filter_categories: Dict[str, str] - """ - - self._filter_categories = filter_categories - - @property - def domain(self) -> str: - """Gets the domain of this ApiModel. - - - :return: The domain of this ApiModel. - :rtype: str - """ - return self._domain - - @domain.setter - def domain(self, domain: str): - """Sets the domain of this ApiModel. - - - :param domain: The domain of this ApiModel. - :type domain: str - """ - - self._domain = domain - - @property - def labels(self) -> Dict[str, str]: - """Gets the labels of this ApiModel. - - - :return: The labels of this ApiModel. - :rtype: Dict[str, str] - """ - return self._labels - - @labels.setter - def labels(self, labels: Dict[str, str]): - """Sets the labels of this ApiModel. - - - :param labels: The labels of this ApiModel. - :type labels: Dict[str, str] - """ - - self._labels = labels - - @property - def framework(self) -> ApiModelFramework: - """Gets the framework of this ApiModel. - - - :return: The framework of this ApiModel. - :rtype: ApiModelFramework - """ - return self._framework - - @framework.setter - def framework(self, framework: ApiModelFramework): - """Sets the framework of this ApiModel. - - - :param framework: The framework of this ApiModel. - :type framework: ApiModelFramework - """ - if framework is None: - raise ValueError("Invalid value for `framework`, must not be `None`") # noqa: E501 - - self._framework = framework - - @property - def trainable(self) -> bool: - """Gets the trainable of this ApiModel. - - - :return: The trainable of this ApiModel. - :rtype: bool - """ - return self._trainable - - @trainable.setter - def trainable(self, trainable: bool): - """Sets the trainable of this ApiModel. - - - :param trainable: The trainable of this ApiModel. - :type trainable: bool - """ - - self._trainable = trainable - - @property - def trainable_tested_platforms(self) -> List[str]: - """Gets the trainable_tested_platforms of this ApiModel. - - - :return: The trainable_tested_platforms of this ApiModel. - :rtype: List[str] - """ - return self._trainable_tested_platforms - - @trainable_tested_platforms.setter - def trainable_tested_platforms(self, trainable_tested_platforms: List[str]): - """Sets the trainable_tested_platforms of this ApiModel. - - - :param trainable_tested_platforms: The trainable_tested_platforms of this ApiModel. - :type trainable_tested_platforms: List[str] - """ - - self._trainable_tested_platforms = trainable_tested_platforms - - @property - def trainable_credentials_required(self) -> bool: - """Gets the trainable_credentials_required of this ApiModel. - - - :return: The trainable_credentials_required of this ApiModel. - :rtype: bool - """ - return self._trainable_credentials_required - - @trainable_credentials_required.setter - def trainable_credentials_required(self, trainable_credentials_required: bool): - """Sets the trainable_credentials_required of this ApiModel. - - - :param trainable_credentials_required: The trainable_credentials_required of this ApiModel. - :type trainable_credentials_required: bool - """ - - self._trainable_credentials_required = trainable_credentials_required - - @property - def trainable_parameters(self) -> List[ApiParameter]: - """Gets the trainable_parameters of this ApiModel. - - - :return: The trainable_parameters of this ApiModel. - :rtype: List[ApiParameter] - """ - return self._trainable_parameters - - @trainable_parameters.setter - def trainable_parameters(self, trainable_parameters: List[ApiParameter]): - """Sets the trainable_parameters of this ApiModel. - - - :param trainable_parameters: The trainable_parameters of this ApiModel. - :type trainable_parameters: List[ApiParameter] - """ - - self._trainable_parameters = trainable_parameters - - @property - def servable(self) -> bool: - """Gets the servable of this ApiModel. - - - :return: The servable of this ApiModel. - :rtype: bool - """ - return self._servable - - @servable.setter - def servable(self, servable: bool): - """Sets the servable of this ApiModel. - - - :param servable: The servable of this ApiModel. - :type servable: bool - """ - - self._servable = servable - - @property - def servable_tested_platforms(self) -> List[str]: - """Gets the servable_tested_platforms of this ApiModel. - - - :return: The servable_tested_platforms of this ApiModel. - :rtype: List[str] - """ - return self._servable_tested_platforms - - @servable_tested_platforms.setter - def servable_tested_platforms(self, servable_tested_platforms: List[str]): - """Sets the servable_tested_platforms of this ApiModel. - - - :param servable_tested_platforms: The servable_tested_platforms of this ApiModel. - :type servable_tested_platforms: List[str] - """ - - self._servable_tested_platforms = servable_tested_platforms - - @property - def servable_credentials_required(self) -> bool: - """Gets the servable_credentials_required of this ApiModel. - - - :return: The servable_credentials_required of this ApiModel. - :rtype: bool - """ - return self._servable_credentials_required - - @servable_credentials_required.setter - def servable_credentials_required(self, servable_credentials_required: bool): - """Sets the servable_credentials_required of this ApiModel. - - - :param servable_credentials_required: The servable_credentials_required of this ApiModel. - :type servable_credentials_required: bool - """ - - self._servable_credentials_required = servable_credentials_required - - @property - def servable_parameters(self) -> List[ApiParameter]: - """Gets the servable_parameters of this ApiModel. - - - :return: The servable_parameters of this ApiModel. - :rtype: List[ApiParameter] - """ - return self._servable_parameters - - @servable_parameters.setter - def servable_parameters(self, servable_parameters: List[ApiParameter]): - """Sets the servable_parameters of this ApiModel. - - - :param servable_parameters: The servable_parameters of this ApiModel. - :type servable_parameters: List[ApiParameter] - """ - - self._servable_parameters = servable_parameters diff --git a/api/server/swagger_server/models/api_model_framework.py b/api/server/swagger_server/models/api_model_framework.py deleted file mode 100644 index cae4bd4d..00000000 --- a/api/server/swagger_server/models/api_model_framework.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_model_framework_runtimes import ApiModelFrameworkRuntimes # noqa: F401,E501 -from swagger_server import util - - -class ApiModelFramework(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, name: str=None, version: str=None, runtimes: ApiModelFrameworkRuntimes=None): # noqa: E501 - """ApiModelFramework - a model defined in Swagger - - :param name: The name of this ApiModelFramework. # noqa: E501 - :type name: str - :param version: The version of this ApiModelFramework. # noqa: E501 - :type version: str - :param runtimes: The runtimes of this ApiModelFramework. # noqa: E501 - :type runtimes: ApiModelFrameworkRuntimes - """ - self.swagger_types = { - 'name': str, - 'version': str, - 'runtimes': ApiModelFrameworkRuntimes - } - - self.attribute_map = { - 'name': 'name', - 'version': 'version', - 'runtimes': 'runtimes' - } - - self._name = name - self._version = version - self._runtimes = runtimes - - @classmethod - def from_dict(cls, dikt) -> 'ApiModelFramework': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiModelFramework of this ApiModelFramework. # noqa: E501 - :rtype: ApiModelFramework - """ - return util.deserialize_model(dikt, cls) - - @property - def name(self) -> str: - """Gets the name of this ApiModelFramework. - - - :return: The name of this ApiModelFramework. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiModelFramework. - - - :param name: The name of this ApiModelFramework. - :type name: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def version(self) -> str: - """Gets the version of this ApiModelFramework. - - - :return: The version of this ApiModelFramework. - :rtype: str - """ - return self._version - - @version.setter - def version(self, version: str): - """Sets the version of this ApiModelFramework. - - - :param version: The version of this ApiModelFramework. - :type version: str - """ - - self._version = version - - @property - def runtimes(self) -> ApiModelFrameworkRuntimes: - """Gets the runtimes of this ApiModelFramework. - - - :return: The runtimes of this ApiModelFramework. - :rtype: ApiModelFrameworkRuntimes - """ - return self._runtimes - - @runtimes.setter - def runtimes(self, runtimes: ApiModelFrameworkRuntimes): - """Sets the runtimes of this ApiModelFramework. - - - :param runtimes: The runtimes of this ApiModelFramework. - :type runtimes: ApiModelFrameworkRuntimes - """ - - self._runtimes = runtimes diff --git a/api/server/swagger_server/models/api_model_framework_runtimes.py b/api/server/swagger_server/models/api_model_framework_runtimes.py deleted file mode 100644 index 6293929e..00000000 --- a/api/server/swagger_server/models/api_model_framework_runtimes.py +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiModelFrameworkRuntimes(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, name: str=None, version: str=None): # noqa: E501 - """ApiModelFrameworkRuntimes - a model defined in Swagger - - :param name: The name of this ApiModelFrameworkRuntimes. # noqa: E501 - :type name: str - :param version: The version of this ApiModelFrameworkRuntimes. # noqa: E501 - :type version: str - """ - self.swagger_types = { - 'name': str, - 'version': str - } - - self.attribute_map = { - 'name': 'name', - 'version': 'version' - } - - self._name = name - self._version = version - - @classmethod - def from_dict(cls, dikt) -> 'ApiModelFrameworkRuntimes': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiModelFramework_runtimes of this ApiModelFrameworkRuntimes. # noqa: E501 - :rtype: ApiModelFrameworkRuntimes - """ - return util.deserialize_model(dikt, cls) - - @property - def name(self) -> str: - """Gets the name of this ApiModelFrameworkRuntimes. - - - :return: The name of this ApiModelFrameworkRuntimes. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiModelFrameworkRuntimes. - - - :param name: The name of this ApiModelFrameworkRuntimes. - :type name: str - """ - - self._name = name - - @property - def version(self) -> str: - """Gets the version of this ApiModelFrameworkRuntimes. - - - :return: The version of this ApiModelFrameworkRuntimes. - :rtype: str - """ - return self._version - - @version.setter - def version(self, version: str): - """Sets the version of this ApiModelFrameworkRuntimes. - - - :param version: The version of this ApiModelFrameworkRuntimes. - :type version: str - """ - - self._version = version diff --git a/api/server/swagger_server/models/api_model_script.py b/api/server/swagger_server/models/api_model_script.py deleted file mode 100644 index 91099a44..00000000 --- a/api/server/swagger_server/models/api_model_script.py +++ /dev/null @@ -1,131 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiModelScript(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, pipeline_stage: str=None, execution_platform: str=None, script_code: str=None): # noqa: E501 - """ApiModelScript - a model defined in Swagger - - :param pipeline_stage: The pipeline_stage of this ApiModelScript. # noqa: E501 - :type pipeline_stage: str - :param execution_platform: The execution_platform of this ApiModelScript. # noqa: E501 - :type execution_platform: str - :param script_code: The script_code of this ApiModelScript. # noqa: E501 - :type script_code: str - """ - self.swagger_types = { - 'pipeline_stage': str, - 'execution_platform': str, - 'script_code': str - } - - self.attribute_map = { - 'pipeline_stage': 'pipeline_stage', - 'execution_platform': 'execution_platform', - 'script_code': 'script_code' - } - - self._pipeline_stage = pipeline_stage - self._execution_platform = execution_platform - self._script_code = script_code - - @classmethod - def from_dict(cls, dikt) -> 'ApiModelScript': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiModelScript of this ApiModelScript. # noqa: E501 - :rtype: ApiModelScript - """ - return util.deserialize_model(dikt, cls) - - @property - def pipeline_stage(self) -> str: - """Gets the pipeline_stage of this ApiModelScript. - - pipeline stage that this code sample applies to, either 'train' or 'serve' # noqa: E501 - - :return: The pipeline_stage of this ApiModelScript. - :rtype: str - """ - return self._pipeline_stage - - @pipeline_stage.setter - def pipeline_stage(self, pipeline_stage: str): - """Sets the pipeline_stage of this ApiModelScript. - - pipeline stage that this code sample applies to, either 'train' or 'serve' # noqa: E501 - - :param pipeline_stage: The pipeline_stage of this ApiModelScript. - :type pipeline_stage: str - """ - if pipeline_stage is None: - raise ValueError("Invalid value for `pipeline_stage`, must not be `None`") # noqa: E501 - - self._pipeline_stage = pipeline_stage - - @property - def execution_platform(self) -> str: - """Gets the execution_platform of this ApiModelScript. - - execution platform that this code sample applies to, i.e. 'kubernetes', 'knative' # noqa: E501 - - :return: The execution_platform of this ApiModelScript. - :rtype: str - """ - return self._execution_platform - - @execution_platform.setter - def execution_platform(self, execution_platform: str): - """Sets the execution_platform of this ApiModelScript. - - execution platform that this code sample applies to, i.e. 'kubernetes', 'knative' # noqa: E501 - - :param execution_platform: The execution_platform of this ApiModelScript. - :type execution_platform: str - """ - if execution_platform is None: - raise ValueError("Invalid value for `execution_platform`, must not be `None`") # noqa: E501 - - self._execution_platform = execution_platform - - @property - def script_code(self) -> str: - """Gets the script_code of this ApiModelScript. - - the source code to run the model in a pipeline stage # noqa: E501 - - :return: The script_code of this ApiModelScript. - :rtype: str - """ - return self._script_code - - @script_code.setter - def script_code(self, script_code: str): - """Sets the script_code of this ApiModelScript. - - the source code to run the model in a pipeline stage # noqa: E501 - - :param script_code: The script_code of this ApiModelScript. - :type script_code: str - """ - if script_code is None: - raise ValueError("Invalid value for `script_code`, must not be `None`") # noqa: E501 - - self._script_code = script_code diff --git a/api/server/swagger_server/models/api_notebook.py b/api/server/swagger_server/models/api_notebook.py deleted file mode 100644 index 48386008..00000000 --- a/api/server/swagger_server/models/api_notebook.py +++ /dev/null @@ -1,337 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.api_asset import ApiAsset -from swagger_server.models.api_metadata import ApiMetadata # noqa: F401,E501 -from swagger_server.models.api_parameter import ApiParameter # noqa: F401,E501 -from swagger_server import util - - -class ApiNotebook(ApiAsset): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, id: str=None, created_at: datetime=None, name: str=None, description: str=None, featured: bool=None, publish_approved: bool=None, related_assets: List[str]=None, filter_categories: Dict[str, str]=None, url: str=None, metadata: ApiMetadata=None, parameters: List[ApiParameter]=None): # noqa: E501 - """ApiNotebook - a model defined in Swagger - - :param id: The id of this ApiNotebook. # noqa: E501 - :type id: str - :param created_at: The created_at of this ApiNotebook. # noqa: E501 - :type created_at: datetime - :param name: The name of this ApiNotebook. # noqa: E501 - :type name: str - :param description: The description of this ApiNotebook. # noqa: E501 - :type description: str - :param featured: The featured of this ApiNotebook. # noqa: E501 - :type featured: bool - :param publish_approved: The publish_approved of this ApiNotebook. # noqa: E501 - :type publish_approved: bool - :param related_assets: The related_assets of this ApiNotebook. # noqa: E501 - :type related_assets: List[str] - :param filter_categories: The filter_categories of this ApiNotebook. # noqa: E501 - :type filter_categories: Dict[str, str] - :param url: The url of this ApiNotebook. # noqa: E501 - :type url: str - :param metadata: The metadata of this ApiNotebook. # noqa: E501 - :type metadata: ApiMetadata - :param parameters: The parameters of this ApiNotebook. # noqa: E501 - :type parameters: List[ApiParameter] - """ - self.swagger_types = { - 'id': str, - 'created_at': datetime, - 'name': str, - 'description': str, - 'featured': bool, - 'publish_approved': bool, - 'related_assets': List[str], - 'filter_categories': Dict[str, str], - 'url': str, - 'metadata': ApiMetadata, - 'parameters': List[ApiParameter] - } - - self.attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'featured': 'featured', - 'publish_approved': 'publish_approved', - 'related_assets': 'related_assets', - 'filter_categories': 'filter_categories', - 'url': 'url', - 'metadata': 'metadata', - 'parameters': 'parameters' - } - - self._id = id - self._created_at = created_at - self._name = name - self._description = description - self._featured = featured - self._publish_approved = publish_approved - self._related_assets = related_assets - self._filter_categories = filter_categories - self._url = url - self._metadata = metadata - self._parameters = parameters - - @classmethod - def from_dict(cls, dikt) -> 'ApiNotebook': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiNotebook of this ApiNotebook. # noqa: E501 - :rtype: ApiNotebook - """ - return util.deserialize_model(dikt, cls) - - @property - def id(self) -> str: - """Gets the id of this ApiNotebook. - - - :return: The id of this ApiNotebook. - :rtype: str - """ - return self._id - - @id.setter - def id(self, id: str): - """Sets the id of this ApiNotebook. - - - :param id: The id of this ApiNotebook. - :type id: str - """ - - self._id = id - - @property - def created_at(self) -> datetime: - """Gets the created_at of this ApiNotebook. - - - :return: The created_at of this ApiNotebook. - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at: datetime): - """Sets the created_at of this ApiNotebook. - - - :param created_at: The created_at of this ApiNotebook. - :type created_at: datetime - """ - - self._created_at = created_at - - @property - def name(self) -> str: - """Gets the name of this ApiNotebook. - - - :return: The name of this ApiNotebook. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiNotebook. - - - :param name: The name of this ApiNotebook. - :type name: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self) -> str: - """Gets the description of this ApiNotebook. - - - :return: The description of this ApiNotebook. - :rtype: str - """ - return self._description - - @description.setter - def description(self, description: str): - """Sets the description of this ApiNotebook. - - - :param description: The description of this ApiNotebook. - :type description: str - """ - if description is None: - raise ValueError("Invalid value for `description`, must not be `None`") # noqa: E501 - - self._description = description - - @property - def featured(self) -> bool: - """Gets the featured of this ApiNotebook. - - - :return: The featured of this ApiNotebook. - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured: bool): - """Sets the featured of this ApiNotebook. - - - :param featured: The featured of this ApiNotebook. - :type featured: bool - """ - - self._featured = featured - - @property - def publish_approved(self) -> bool: - """Gets the publish_approved of this ApiNotebook. - - - :return: The publish_approved of this ApiNotebook. - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved: bool): - """Sets the publish_approved of this ApiNotebook. - - - :param publish_approved: The publish_approved of this ApiNotebook. - :type publish_approved: bool - """ - - self._publish_approved = publish_approved - - @property - def related_assets(self) -> List[str]: - """Gets the related_assets of this ApiNotebook. - - - :return: The related_assets of this ApiNotebook. - :rtype: List[str] - """ - return self._related_assets - - @related_assets.setter - def related_assets(self, related_assets: List[str]): - """Sets the related_assets of this ApiNotebook. - - - :param related_assets: The related_assets of this ApiNotebook. - :type related_assets: List[str] - """ - - self._related_assets = related_assets - - @property - def filter_categories(self) -> Dict[str, str]: - """Gets the filter_categories of this ApiNotebook. - - - :return: The filter_categories of this ApiNotebook. - :rtype: Dict[str, str] - """ - return self._filter_categories - - @filter_categories.setter - def filter_categories(self, filter_categories: Dict[str, str]): - """Sets the filter_categories of this ApiNotebook. - - - :param filter_categories: The filter_categories of this ApiNotebook. - :type filter_categories: Dict[str, str] - """ - - self._filter_categories = filter_categories - - @property - def url(self) -> str: - """Gets the url of this ApiNotebook. - - The URL to the notebook source file (.ipynb) on GitHub.com # noqa: E501 - - :return: The url of this ApiNotebook. - :rtype: str - """ - return self._url - - @url.setter - def url(self, url: str): - """Sets the url of this ApiNotebook. - - The URL to the notebook source file (.ipynb) on GitHub.com # noqa: E501 - - :param url: The url of this ApiNotebook. - :type url: str - """ - if url is None: - raise ValueError("Invalid value for `url`, must not be `None`") # noqa: E501 - - self._url = url - - @property - def metadata(self) -> ApiMetadata: - """Gets the metadata of this ApiNotebook. - - - :return: The metadata of this ApiNotebook. - :rtype: ApiMetadata - """ - return self._metadata - - @metadata.setter - def metadata(self, metadata: ApiMetadata): - """Sets the metadata of this ApiNotebook. - - - :param metadata: The metadata of this ApiNotebook. - :type metadata: ApiMetadata - """ - - self._metadata = metadata - - @property - def parameters(self) -> List[ApiParameter]: - """Gets the parameters of this ApiNotebook. - - - :return: The parameters of this ApiNotebook. - :rtype: List[ApiParameter] - """ - return self._parameters - - @parameters.setter - def parameters(self, parameters: List[ApiParameter]): - """Sets the parameters of this ApiNotebook. - - - :param parameters: The parameters of this ApiNotebook. - :type parameters: List[ApiParameter] - """ - - self._parameters = parameters diff --git a/api/server/swagger_server/models/api_parameter.py b/api/server/swagger_server/models/api_parameter.py deleted file mode 100644 index 9f8de072..00000000 --- a/api/server/swagger_server/models/api_parameter.py +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.any_value import AnyValue # noqa: F401,E501 -from swagger_server import util - - -class ApiParameter(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, name: str=None, description: str=None, default: AnyValue=None, value: AnyValue=None): # noqa: E501 - """ApiParameter - a model defined in Swagger - - :param name: The name of this ApiParameter. # noqa: E501 - :type name: str - :param description: The description of this ApiParameter. # noqa: E501 - :type description: str - :param default: The default of this ApiParameter. # noqa: E501 - :type default: AnyValue - :param value: The value of this ApiParameter. # noqa: E501 - :type value: AnyValue - """ - self.swagger_types = { - 'name': str, - 'description': str, - 'default': AnyValue, - 'value': AnyValue - } - - self.attribute_map = { - 'name': 'name', - 'description': 'description', - 'default': 'default', - 'value': 'value' - } - - self._name = name - self._description = description - self._default = default - self._value = value - - @classmethod - def from_dict(cls, dikt) -> 'ApiParameter': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiParameter of this ApiParameter. # noqa: E501 - :rtype: ApiParameter - """ - return util.deserialize_model(dikt, cls) - - @property - def name(self) -> str: - """Gets the name of this ApiParameter. - - - :return: The name of this ApiParameter. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiParameter. - - - :param name: The name of this ApiParameter. - :type name: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self) -> str: - """Gets the description of this ApiParameter. - - - :return: The description of this ApiParameter. - :rtype: str - """ - return self._description - - @description.setter - def description(self, description: str): - """Sets the description of this ApiParameter. - - - :param description: The description of this ApiParameter. - :type description: str - """ - - self._description = description - - @property - def default(self) -> AnyValue: - """Gets the default of this ApiParameter. - - - :return: The default of this ApiParameter. - :rtype: AnyValue - """ - return self._default - - @default.setter - def default(self, default: AnyValue): - """Sets the default of this ApiParameter. - - - :param default: The default of this ApiParameter. - :type default: AnyValue - """ - - self._default = default - - @property - def value(self) -> AnyValue: - """Gets the value of this ApiParameter. - - - :return: The value of this ApiParameter. - :rtype: AnyValue - """ - return self._value - - @value.setter - def value(self, value: AnyValue): - """Sets the value of this ApiParameter. - - - :param value: The value of this ApiParameter. - :type value: AnyValue - """ - - self._value = value diff --git a/api/server/swagger_server/models/api_pipeline.py b/api/server/swagger_server/models/api_pipeline.py deleted file mode 100644 index 9121d601..00000000 --- a/api/server/swagger_server/models/api_pipeline.py +++ /dev/null @@ -1,254 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_parameter import ApiParameter # noqa: F401,E501 -from swagger_server import util - - -class ApiPipeline(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, id: str=None, created_at: datetime=None, name: str=None, description: str=None, parameters: List[ApiParameter]=None, status: str=None, default_version_id: str=None, namespace: str=None): # noqa: E501 - """ApiPipeline - a model defined in Swagger - - :param id: The id of this ApiPipeline. # noqa: E501 - :type id: str - :param created_at: The created_at of this ApiPipeline. # noqa: E501 - :type created_at: datetime - :param name: The name of this ApiPipeline. # noqa: E501 - :type name: str - :param description: The description of this ApiPipeline. # noqa: E501 - :type description: str - :param parameters: The parameters of this ApiPipeline. # noqa: E501 - :type parameters: List[ApiParameter] - :param status: The status of this ApiPipeline. # noqa: E501 - :type status: str - :param default_version_id: The default_version_id of this ApiPipeline. # noqa: E501 - :type default_version_id: str - :param namespace: The namespace of this ApiPipeline. # noqa: E501 - :type namespace: str - """ - self.swagger_types = { - 'id': str, - 'created_at': datetime, - 'name': str, - 'description': str, - 'parameters': List[ApiParameter], - 'status': str, - 'default_version_id': str, - 'namespace': str - } - - self.attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'parameters': 'parameters', - 'status': 'status', - 'default_version_id': 'default_version_id', - 'namespace': 'namespace' - } - - self._id = id - self._created_at = created_at - self._name = name - self._description = description - self._parameters = parameters - self._status = status - self._default_version_id = default_version_id - self._namespace = namespace - - @classmethod - def from_dict(cls, dikt) -> 'ApiPipeline': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiPipeline of this ApiPipeline. # noqa: E501 - :rtype: ApiPipeline - """ - return util.deserialize_model(dikt, cls) - - @property - def id(self) -> str: - """Gets the id of this ApiPipeline. - - - :return: The id of this ApiPipeline. - :rtype: str - """ - return self._id - - @id.setter - def id(self, id: str): - """Sets the id of this ApiPipeline. - - - :param id: The id of this ApiPipeline. - :type id: str - """ - - self._id = id - - @property - def created_at(self) -> datetime: - """Gets the created_at of this ApiPipeline. - - - :return: The created_at of this ApiPipeline. - :rtype: datetime - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at: datetime): - """Sets the created_at of this ApiPipeline. - - - :param created_at: The created_at of this ApiPipeline. - :type created_at: datetime - """ - - self._created_at = created_at - - @property - def name(self) -> str: - """Gets the name of this ApiPipeline. - - - :return: The name of this ApiPipeline. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiPipeline. - - - :param name: The name of this ApiPipeline. - :type name: str - """ - - self._name = name - - @property - def description(self) -> str: - """Gets the description of this ApiPipeline. - - - :return: The description of this ApiPipeline. - :rtype: str - """ - return self._description - - @description.setter - def description(self, description: str): - """Sets the description of this ApiPipeline. - - - :param description: The description of this ApiPipeline. - :type description: str - """ - - self._description = description - - @property - def parameters(self) -> List[ApiParameter]: - """Gets the parameters of this ApiPipeline. - - - :return: The parameters of this ApiPipeline. - :rtype: List[ApiParameter] - """ - return self._parameters - - @parameters.setter - def parameters(self, parameters: List[ApiParameter]): - """Sets the parameters of this ApiPipeline. - - - :param parameters: The parameters of this ApiPipeline. - :type parameters: List[ApiParameter] - """ - - self._parameters = parameters - - @property - def status(self) -> str: - """Gets the status of this ApiPipeline. - - In case any error happens retrieving a pipeline field, only pipeline ID and the error message is returned. Client has the flexibility of choosing how to handle error. This is especially useful during listing call. # noqa: E501 - - :return: The status of this ApiPipeline. - :rtype: str - """ - return self._status - - @status.setter - def status(self, status: str): - """Sets the status of this ApiPipeline. - - In case any error happens retrieving a pipeline field, only pipeline ID and the error message is returned. Client has the flexibility of choosing how to handle error. This is especially useful during listing call. # noqa: E501 - - :param status: The status of this ApiPipeline. - :type status: str - """ - - self._status = status - - @property - def default_version_id(self) -> str: - """Gets the default_version_id of this ApiPipeline. - - The default version of the pipeline. As of now, the latest version is used as default. (In the future, if desired by customers, we can allow them to set default version.) # noqa: E501 - - :return: The default_version_id of this ApiPipeline. - :rtype: str - """ - return self._default_version_id - - @default_version_id.setter - def default_version_id(self, default_version_id: str): - """Sets the default_version_id of this ApiPipeline. - - The default version of the pipeline. As of now, the latest version is used as default. (In the future, if desired by customers, we can allow them to set default version.) # noqa: E501 - - :param default_version_id: The default_version_id of this ApiPipeline. - :type default_version_id: str - """ - - self._default_version_id = default_version_id - - @property - def namespace(self) -> str: - """Gets the namespace of this ApiPipeline. - - - :return: The namespace of this ApiPipeline. - :rtype: str - """ - return self._namespace - - @namespace.setter - def namespace(self, namespace: str): - """Sets the namespace of this ApiPipeline. - - - :param namespace: The namespace of this ApiPipeline. - :type namespace: str - """ - - self._namespace = namespace diff --git a/api/server/swagger_server/models/api_pipeline_custom.py b/api/server/swagger_server/models/api_pipeline_custom.py deleted file mode 100644 index e6841e5b..00000000 --- a/api/server/swagger_server/models/api_pipeline_custom.py +++ /dev/null @@ -1,155 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_pipeline_dag import ApiPipelineDAG # noqa: F401,E501 -from swagger_server.models.api_pipeline_inputs import ApiPipelineInputs # noqa: F401,E501 -from swagger_server import util - - -class ApiPipelineCustom(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, dag: ApiPipelineDAG=None, inputs: ApiPipelineInputs=None, name: str=None, description: str=None): # noqa: E501 - """ApiPipelineCustom - a model defined in Swagger - - :param dag: The dag of this ApiPipelineCustom. # noqa: E501 - :type dag: ApiPipelineDAG - :param inputs: The inputs of this ApiPipelineCustom. # noqa: E501 - :type inputs: ApiPipelineInputs - :param name: The name of this ApiPipelineCustom. # noqa: E501 - :type name: str - :param description: The description of this ApiPipelineCustom. # noqa: E501 - :type description: str - """ - self.swagger_types = { - 'dag': ApiPipelineDAG, - 'inputs': ApiPipelineInputs, - 'name': str, - 'description': str - } - - self.attribute_map = { - 'dag': 'dag', - 'inputs': 'inputs', - 'name': 'name', - 'description': 'description' - } - - self._dag = dag - self._inputs = inputs - self._name = name - self._description = description - - @classmethod - def from_dict(cls, dikt) -> 'ApiPipelineCustom': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiPipelineCustom of this ApiPipelineCustom. # noqa: E501 - :rtype: ApiPipelineCustom - """ - return util.deserialize_model(dikt, cls) - - @property - def dag(self) -> ApiPipelineDAG: - """Gets the dag of this ApiPipelineCustom. - - - :return: The dag of this ApiPipelineCustom. - :rtype: ApiPipelineDAG - """ - return self._dag - - @dag.setter - def dag(self, dag: ApiPipelineDAG): - """Sets the dag of this ApiPipelineCustom. - - - :param dag: The dag of this ApiPipelineCustom. - :type dag: ApiPipelineDAG - """ - if dag is None: - raise ValueError("Invalid value for `dag`, must not be `None`") # noqa: E501 - - self._dag = dag - - @property - def inputs(self) -> ApiPipelineInputs: - """Gets the inputs of this ApiPipelineCustom. - - - :return: The inputs of this ApiPipelineCustom. - :rtype: ApiPipelineInputs - """ - return self._inputs - - @inputs.setter - def inputs(self, inputs: ApiPipelineInputs): - """Sets the inputs of this ApiPipelineCustom. - - - :param inputs: The inputs of this ApiPipelineCustom. - :type inputs: ApiPipelineInputs - """ - - self._inputs = inputs - - @property - def name(self) -> str: - """Gets the name of this ApiPipelineCustom. - - Name of the custom pipeline # noqa: E501 - - :return: The name of this ApiPipelineCustom. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiPipelineCustom. - - Name of the custom pipeline # noqa: E501 - - :param name: The name of this ApiPipelineCustom. - :type name: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self) -> str: - """Gets the description of this ApiPipelineCustom. - - Optional description of the custom pipeline # noqa: E501 - - :return: The description of this ApiPipelineCustom. - :rtype: str - """ - return self._description - - @description.setter - def description(self, description: str): - """Sets the description of this ApiPipelineCustom. - - Optional description of the custom pipeline # noqa: E501 - - :param description: The description of this ApiPipelineCustom. - :type description: str - """ - - self._description = description diff --git a/api/server/swagger_server/models/api_pipeline_custom_run_payload.py b/api/server/swagger_server/models/api_pipeline_custom_run_payload.py deleted file mode 100644 index 6aadd22d..00000000 --- a/api/server/swagger_server/models/api_pipeline_custom_run_payload.py +++ /dev/null @@ -1,95 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_pipeline_custom import ApiPipelineCustom # noqa: F401,E501 -from swagger_server.models.dictionary import Dictionary # noqa: F401,E501 -from swagger_server import util - - -class ApiPipelineCustomRunPayload(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, custom_pipeline: ApiPipelineCustom=None, run_parameters: Dictionary=None): # noqa: E501 - """ApiPipelineCustomRunPayload - a model defined in Swagger - - :param custom_pipeline: The custom_pipeline of this ApiPipelineCustomRunPayload. # noqa: E501 - :type custom_pipeline: ApiPipelineCustom - :param run_parameters: The run_parameters of this ApiPipelineCustomRunPayload. # noqa: E501 - :type run_parameters: Dictionary - """ - self.swagger_types = { - 'custom_pipeline': ApiPipelineCustom, - 'run_parameters': Dictionary - } - - self.attribute_map = { - 'custom_pipeline': 'custom_pipeline', - 'run_parameters': 'run_parameters' - } - - self._custom_pipeline = custom_pipeline - self._run_parameters = run_parameters - - @classmethod - def from_dict(cls, dikt) -> 'ApiPipelineCustomRunPayload': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiPipelineCustomRunPayload of this ApiPipelineCustomRunPayload. # noqa: E501 - :rtype: ApiPipelineCustomRunPayload - """ - return util.deserialize_model(dikt, cls) - - @property - def custom_pipeline(self) -> ApiPipelineCustom: - """Gets the custom_pipeline of this ApiPipelineCustomRunPayload. - - - :return: The custom_pipeline of this ApiPipelineCustomRunPayload. - :rtype: ApiPipelineCustom - """ - return self._custom_pipeline - - @custom_pipeline.setter - def custom_pipeline(self, custom_pipeline: ApiPipelineCustom): - """Sets the custom_pipeline of this ApiPipelineCustomRunPayload. - - - :param custom_pipeline: The custom_pipeline of this ApiPipelineCustomRunPayload. - :type custom_pipeline: ApiPipelineCustom - """ - - self._custom_pipeline = custom_pipeline - - @property - def run_parameters(self) -> Dictionary: - """Gets the run_parameters of this ApiPipelineCustomRunPayload. - - - :return: The run_parameters of this ApiPipelineCustomRunPayload. - :rtype: Dictionary - """ - return self._run_parameters - - @run_parameters.setter - def run_parameters(self, run_parameters: Dictionary): - """Sets the run_parameters of this ApiPipelineCustomRunPayload. - - - :param run_parameters: The run_parameters of this ApiPipelineCustomRunPayload. - :type run_parameters: Dictionary - """ - - self._run_parameters = run_parameters diff --git a/api/server/swagger_server/models/api_pipeline_dag.py b/api/server/swagger_server/models/api_pipeline_dag.py deleted file mode 100644 index 7aef7a89..00000000 --- a/api/server/swagger_server/models/api_pipeline_dag.py +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_pipeline_task import ApiPipelineTask # noqa: F401,E501 -from swagger_server import util - - -class ApiPipelineDAG(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, tasks: List[ApiPipelineTask]=None): # noqa: E501 - """ApiPipelineDAG - a model defined in Swagger - - :param tasks: The tasks of this ApiPipelineDAG. # noqa: E501 - :type tasks: List[ApiPipelineTask] - """ - self.swagger_types = { - 'tasks': List[ApiPipelineTask] - } - - self.attribute_map = { - 'tasks': 'tasks' - } - - self._tasks = tasks - - @classmethod - def from_dict(cls, dikt) -> 'ApiPipelineDAG': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiPipelineDAG of this ApiPipelineDAG. # noqa: E501 - :rtype: ApiPipelineDAG - """ - return util.deserialize_model(dikt, cls) - - @property - def tasks(self) -> List[ApiPipelineTask]: - """Gets the tasks of this ApiPipelineDAG. - - List of pipeline tasks. # noqa: E501 - - :return: The tasks of this ApiPipelineDAG. - :rtype: List[ApiPipelineTask] - """ - return self._tasks - - @tasks.setter - def tasks(self, tasks: List[ApiPipelineTask]): - """Sets the tasks of this ApiPipelineDAG. - - List of pipeline tasks. # noqa: E501 - - :param tasks: The tasks of this ApiPipelineDAG. - :type tasks: List[ApiPipelineTask] - """ - - self._tasks = tasks diff --git a/api/server/swagger_server/models/api_pipeline_extended.py b/api/server/swagger_server/models/api_pipeline_extended.py deleted file mode 100644 index 63b5c6b5..00000000 --- a/api/server/swagger_server/models/api_pipeline_extended.py +++ /dev/null @@ -1,334 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_parameter import ApiParameter # noqa: F401,E501 -from swagger_server.models.api_pipeline import ApiPipeline # noqa: F401,E501 -from swagger_server.models.api_pipeline_extension import ApiPipelineExtension # noqa: F401,E501 -from swagger_server import util - - -class ApiPipelineExtended(ApiPipeline, ApiPipelineExtension): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, id: str=None, created_at: datetime=None, name: str=None, description: str=None, parameters: List[ApiParameter]=None, status: str=None, default_version_id: str=None, namespace: str=None, annotations: Dict[str, str]=None, featured: bool=None, publish_approved: bool=None): # noqa: E501 - """ApiPipelineExtended - a model defined in Swagger - - :param id: The id of this ApiPipelineExtended. # noqa: E501 - :type id: str - :param created_at: The created_at of this ApiPipelineExtended. # noqa: E501 - :type created_at: datetime - :param name: The name of this ApiPipelineExtended. # noqa: E501 - :type name: str - :param description: The description of this ApiPipelineExtended. # noqa: E501 - :type description: str - :param parameters: The parameters of this ApiPipelineExtended. # noqa: E501 - :type parameters: List[ApiParameter] - :param status: The status of this ApiPipelineExtended. # noqa: E501 - :type status: str - :param default_version_id: The default_version_id of this ApiPipelineExtended. # noqa: E501 - :type default_version_id: str - :param namespace: The namespace of this ApiPipelineExtended. # noqa: E501 - :type namespace: str - :param annotations: The annotations of this ApiPipelineExtended. # noqa: E501 - :type annotations: Dict[str, str] - :param featured: The featured of this ApiPipelineExtended. # noqa: E501 - :type featured: bool - :param publish_approved: The publish_approved of this ApiPipelineExtended. # noqa: E501 - :type publish_approved: bool - """ - self.swagger_types = { - 'id': str, - 'created_at': datetime, - 'name': str, - 'description': str, - 'parameters': List[ApiParameter], - 'status': str, - 'default_version_id': str, - 'namespace': str, - 'annotations': Dict[str, str], - 'featured': bool, - 'publish_approved': bool - } - - self.attribute_map = { - 'id': 'id', - 'created_at': 'created_at', - 'name': 'name', - 'description': 'description', - 'parameters': 'parameters', - 'status': 'status', - 'default_version_id': 'default_version_id', - 'namespace': 'namespace', - 'annotations': 'annotations', - 'featured': 'featured', - 'publish_approved': 'publish_approved' - } - - self._id = id - self._created_at = created_at - self._name = name - self._description = description - self._parameters = parameters - self._status = status - self._default_version_id = default_version_id - self._namespace = namespace - self._annotations = annotations - self._featured = featured - self._publish_approved = publish_approved - - @classmethod - def from_dict(cls, dikt) -> 'ApiPipelineExtended': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiPipelineExtended of this ApiPipelineExtended. # noqa: E501 - :rtype: ApiPipelineExtended - """ - return util.deserialize_model(dikt, cls) - - # @property - # def id(self) -> str: - # """Gets the id of this ApiPipelineExtended. - # - # - # :return: The id of this ApiPipelineExtended. - # :rtype: str - # """ - # return self._id - # - # @id.setter - # def id(self, id: str): - # """Sets the id of this ApiPipelineExtended. - # - # - # :param id: The id of this ApiPipelineExtended. - # :type id: str - # """ - # - # self._id = id - # - # @property - # def created_at(self) -> datetime: - # """Gets the created_at of this ApiPipelineExtended. - # - # - # :return: The created_at of this ApiPipelineExtended. - # :rtype: datetime - # """ - # return self._created_at - # - # @created_at.setter - # def created_at(self, created_at: datetime): - # """Sets the created_at of this ApiPipelineExtended. - # - # - # :param created_at: The created_at of this ApiPipelineExtended. - # :type created_at: datetime - # """ - # - # self._created_at = created_at - # - # @property - # def name(self) -> str: - # """Gets the name of this ApiPipelineExtended. - # - # - # :return: The name of this ApiPipelineExtended. - # :rtype: str - # """ - # return self._name - # - # @name.setter - # def name(self, name: str): - # """Sets the name of this ApiPipelineExtended. - # - # - # :param name: The name of this ApiPipelineExtended. - # :type name: str - # """ - # - # self._name = name - # - # @property - # def description(self) -> str: - # """Gets the description of this ApiPipelineExtended. - # - # - # :return: The description of this ApiPipelineExtended. - # :rtype: str - # """ - # return self._description - # - # @description.setter - # def description(self, description: str): - # """Sets the description of this ApiPipelineExtended. - # - # - # :param description: The description of this ApiPipelineExtended. - # :type description: str - # """ - # - # self._description = description - # - # @property - # def parameters(self) -> List[ApiParameter]: - # """Gets the parameters of this ApiPipelineExtended. - # - # - # :return: The parameters of this ApiPipelineExtended. - # :rtype: List[ApiParameter] - # """ - # return self._parameters - # - # @parameters.setter - # def parameters(self, parameters: List[ApiParameter]): - # """Sets the parameters of this ApiPipelineExtended. - # - # - # :param parameters: The parameters of this ApiPipelineExtended. - # :type parameters: List[ApiParameter] - # """ - # - # self._parameters = parameters - # - # @property - # def status(self) -> str: - # """Gets the status of this ApiPipelineExtended. - # - # In case any error happens retrieving a pipeline field, only pipeline ID and the error message is returned. Client has the flexibility of choosing how to handle error. This is especially useful during listing call. # noqa: E501 - # - # :return: The status of this ApiPipelineExtended. - # :rtype: str - # """ - # return self._status - # - # @status.setter - # def status(self, status: str): - # """Sets the status of this ApiPipelineExtended. - # - # In case any error happens retrieving a pipeline field, only pipeline ID and the error message is returned. Client has the flexibility of choosing how to handle error. This is especially useful during listing call. # noqa: E501 - # - # :param status: The status of this ApiPipelineExtended. - # :type status: str - # """ - # - # self._status = status - # - # @property - # def default_version_id(self) -> str: - # """Gets the default_version_id of this ApiPipelineExtended. - # - # The default version of the pipeline. As of now, the latest version is used as default. (In the future, if desired by customers, we can allow them to set default version.) # noqa: E501 - # - # :return: The default_version_id of this ApiPipelineExtended. - # :rtype: str - # """ - # return self._default_version_id - # - # @default_version_id.setter - # def default_version_id(self, default_version_id: str): - # """Sets the default_version_id of this ApiPipelineExtended. - # - # The default version of the pipeline. As of now, the latest version is used as default. (In the future, if desired by customers, we can allow them to set default version.) # noqa: E501 - # - # :param default_version_id: The default_version_id of this ApiPipelineExtended. - # :type default_version_id: str - # """ - # - # self._default_version_id = default_version_id - # - # @property - # def namespace(self) -> str: - # """Gets the namespace of this ApiPipelineExtended. - # - # - # :return: The namespace of this ApiPipelineExtended. - # :rtype: str - # """ - # return self._namespace - # - # @namespace.setter - # def namespace(self, namespace: str): - # """Sets the namespace of this ApiPipelineExtended. - # - # - # :param namespace: The namespace of this ApiPipelineExtended. - # :type namespace: str - # """ - # - # self._namespace = namespace - # - # @property - # def annotations(self) -> Dict[str, str]: - # """Gets the annotations of this ApiPipelineExtended. - # - # - # :return: The annotations of this ApiPipelineExtended. - # :rtype: Dict[str, str] - # """ - # return self._annotations - # - # @annotations.setter - # def annotations(self, annotations: Dict[str, str]): - # """Sets the annotations of this ApiPipelineExtended. - # - # - # :param annotations: The annotations of this ApiPipelineExtended. - # :type annotations: Dict[str, str] - # """ - # - # self._annotations = annotations - # - # @property - # def featured(self) -> bool: - # """Gets the featured of this ApiPipelineExtended. - # - # - # :return: The featured of this ApiPipelineExtended. - # :rtype: bool - # """ - # return self._featured - # - # @featured.setter - # def featured(self, featured: bool): - # """Sets the featured of this ApiPipelineExtended. - # - # - # :param featured: The featured of this ApiPipelineExtended. - # :type featured: bool - # """ - # - # self._featured = featured - # - # @property - # def publish_approved(self) -> bool: - # """Gets the publish_approved of this ApiPipelineExtended. - # - # - # :return: The publish_approved of this ApiPipelineExtended. - # :rtype: bool - # """ - # return self._publish_approved - # - # @publish_approved.setter - # def publish_approved(self, publish_approved: bool): - # """Sets the publish_approved of this ApiPipelineExtended. - # - # - # :param publish_approved: The publish_approved of this ApiPipelineExtended. - # :type publish_approved: bool - # """ - # - # self._publish_approved = publish_approved diff --git a/api/server/swagger_server/models/api_pipeline_extension.py b/api/server/swagger_server/models/api_pipeline_extension.py deleted file mode 100644 index d0d9c26c..00000000 --- a/api/server/swagger_server/models/api_pipeline_extension.py +++ /dev/null @@ -1,145 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiPipelineExtension(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, id: str=None, annotations: Dict[str, str]=None, featured: bool=None, publish_approved: bool=None): # noqa: E501 - """ApiPipelineExtension - a model defined in Swagger - - :param id: The id of this ApiPipelineExtension. # noqa: E501 - :type id: str - :param annotations: The annotations of this ApiPipelineExtension. # noqa: E501 - :type annotations: Dict[str, str] - :param featured: The featured of this ApiPipelineExtension. # noqa: E501 - :type featured: bool - :param publish_approved: The publish_approved of this ApiPipelineExtension. # noqa: E501 - :type publish_approved: bool - """ - self.swagger_types = { - 'id': str, - 'annotations': Dict[str, str], - 'featured': bool, - 'publish_approved': bool - } - - self.attribute_map = { - 'id': 'id', - 'annotations': 'annotations', - 'featured': 'featured', - 'publish_approved': 'publish_approved' - } - - self._id = id - self._annotations = annotations - self._featured = featured - self._publish_approved = publish_approved - - @classmethod - def from_dict(cls, dikt) -> 'ApiPipelineExtension': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiPipelineExtension of this ApiPipelineExtension. # noqa: E501 - :rtype: ApiPipelineExtension - """ - return util.deserialize_model(dikt, cls) - - @property - def id(self) -> str: - """Gets the id of this ApiPipelineExtension. - - - :return: The id of this ApiPipelineExtension. - :rtype: str - """ - return self._id - - @id.setter - def id(self, id: str): - """Sets the id of this ApiPipelineExtension. - - - :param id: The id of this ApiPipelineExtension. - :type id: str - """ - - self._id = id - - @property - def annotations(self) -> Dict[str, str]: - """Gets the annotations of this ApiPipelineExtension. - - - :return: The annotations of this ApiPipelineExtension. - :rtype: Dict[str, str] - """ - return self._annotations - - @annotations.setter - def annotations(self, annotations: Dict[str, str]): - """Sets the annotations of this ApiPipelineExtension. - - - :param annotations: The annotations of this ApiPipelineExtension. - :type annotations: Dict[str, str] - """ - - self._annotations = annotations - - @property - def featured(self) -> bool: - """Gets the featured of this ApiPipelineExtension. - - - :return: The featured of this ApiPipelineExtension. - :rtype: bool - """ - return self._featured - - @featured.setter - def featured(self, featured: bool): - """Sets the featured of this ApiPipelineExtension. - - - :param featured: The featured of this ApiPipelineExtension. - :type featured: bool - """ - - self._featured = featured - - @property - def publish_approved(self) -> bool: - """Gets the publish_approved of this ApiPipelineExtension. - - - :return: The publish_approved of this ApiPipelineExtension. - :rtype: bool - """ - return self._publish_approved - - @publish_approved.setter - def publish_approved(self, publish_approved: bool): - """Sets the publish_approved of this ApiPipelineExtension. - - - :param publish_approved: The publish_approved of this ApiPipelineExtension. - :type publish_approved: bool - """ - - self._publish_approved = publish_approved diff --git a/api/server/swagger_server/models/api_pipeline_inputs.py b/api/server/swagger_server/models/api_pipeline_inputs.py deleted file mode 100644 index 1a437471..00000000 --- a/api/server/swagger_server/models/api_pipeline_inputs.py +++ /dev/null @@ -1,70 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_parameter import ApiParameter # noqa: F401,E501 -from swagger_server import util - - -class ApiPipelineInputs(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, parameters: List[ApiParameter]=None): # noqa: E501 - """ApiPipelineInputs - a model defined in Swagger - - :param parameters: The parameters of this ApiPipelineInputs. # noqa: E501 - :type parameters: List[ApiParameter] - """ - self.swagger_types = { - 'parameters': List[ApiParameter] - } - - self.attribute_map = { - 'parameters': 'parameters' - } - - self._parameters = parameters - - @classmethod - def from_dict(cls, dikt) -> 'ApiPipelineInputs': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiPipelineInputs of this ApiPipelineInputs. # noqa: E501 - :rtype: ApiPipelineInputs - """ - return util.deserialize_model(dikt, cls) - - @property - def parameters(self) -> List[ApiParameter]: - """Gets the parameters of this ApiPipelineInputs. - - List of pipeline parameters # noqa: E501 - - :return: The parameters of this ApiPipelineInputs. - :rtype: List[ApiParameter] - """ - return self._parameters - - @parameters.setter - def parameters(self, parameters: List[ApiParameter]): - """Sets the parameters of this ApiPipelineInputs. - - List of pipeline parameters # noqa: E501 - - :param parameters: The parameters of this ApiPipelineInputs. - :type parameters: List[ApiParameter] - """ - - self._parameters = parameters diff --git a/api/server/swagger_server/models/api_pipeline_task.py b/api/server/swagger_server/models/api_pipeline_task.py deleted file mode 100644 index 8fd42228..00000000 --- a/api/server/swagger_server/models/api_pipeline_task.py +++ /dev/null @@ -1,182 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_pipeline_task_arguments import ApiPipelineTaskArguments # noqa: F401,E501 -from swagger_server import util - - -class ApiPipelineTask(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, name: str=None, artifact_type: str=None, artifact_id: str=None, arguments: ApiPipelineTaskArguments=None, dependencies: List[str]=None): # noqa: E501 - """ApiPipelineTask - a model defined in Swagger - - :param name: The name of this ApiPipelineTask. # noqa: E501 - :type name: str - :param artifact_type: The artifact_type of this ApiPipelineTask. # noqa: E501 - :type artifact_type: str - :param artifact_id: The artifact_id of this ApiPipelineTask. # noqa: E501 - :type artifact_id: str - :param arguments: The arguments of this ApiPipelineTask. # noqa: E501 - :type arguments: ApiPipelineTaskArguments - :param dependencies: The dependencies of this ApiPipelineTask. # noqa: E501 - :type dependencies: List[str] - """ - self.swagger_types = { - 'name': str, - 'artifact_type': str, - 'artifact_id': str, - 'arguments': ApiPipelineTaskArguments, - 'dependencies': List[str] - } - - self.attribute_map = { - 'name': 'name', - 'artifact_type': 'artifact_type', - 'artifact_id': 'artifact_id', - 'arguments': 'arguments', - 'dependencies': 'dependencies' - } - - self._name = name - self._artifact_type = artifact_type - self._artifact_id = artifact_id - self._arguments = arguments - self._dependencies = dependencies - - @classmethod - def from_dict(cls, dikt) -> 'ApiPipelineTask': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiPipelineTask of this ApiPipelineTask. # noqa: E501 - :rtype: ApiPipelineTask - """ - return util.deserialize_model(dikt, cls) - - @property - def name(self) -> str: - """Gets the name of this ApiPipelineTask. - - - :return: The name of this ApiPipelineTask. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiPipelineTask. - - - :param name: The name of this ApiPipelineTask. - :type name: str - """ - - self._name = name - - @property - def artifact_type(self) -> str: - """Gets the artifact_type of this ApiPipelineTask. - - The type of artifact for this task, can be either one of: 'component', 'model', 'notebook', 'pipeline' # noqa: E501 - - :return: The artifact_type of this ApiPipelineTask. - :rtype: str - """ - return self._artifact_type - - @artifact_type.setter - def artifact_type(self, artifact_type: str): - """Sets the artifact_type of this ApiPipelineTask. - - The type of artifact for this task, can be either one of: 'component', 'model', 'notebook', 'pipeline' # noqa: E501 - - :param artifact_type: The artifact_type of this ApiPipelineTask. - :type artifact_type: str - """ - if artifact_type is None: - raise ValueError("Invalid value for `artifact_type`, must not be `None`") # noqa: E501 - - self._artifact_type = artifact_type - - @property - def artifact_id(self) -> str: - """Gets the artifact_id of this ApiPipelineTask. - - The UUID of the artifact for this task # noqa: E501 - - :return: The artifact_id of this ApiPipelineTask. - :rtype: str - """ - return self._artifact_id - - @artifact_id.setter - def artifact_id(self, artifact_id: str): - """Sets the artifact_id of this ApiPipelineTask. - - The UUID of the artifact for this task # noqa: E501 - - :param artifact_id: The artifact_id of this ApiPipelineTask. - :type artifact_id: str - """ - if artifact_id is None: - raise ValueError("Invalid value for `artifact_id`, must not be `None`") # noqa: E501 - - self._artifact_id = artifact_id - - @property - def arguments(self) -> ApiPipelineTaskArguments: - """Gets the arguments of this ApiPipelineTask. - - - :return: The arguments of this ApiPipelineTask. - :rtype: ApiPipelineTaskArguments - """ - return self._arguments - - @arguments.setter - def arguments(self, arguments: ApiPipelineTaskArguments): - """Sets the arguments of this ApiPipelineTask. - - - :param arguments: The arguments of this ApiPipelineTask. - :type arguments: ApiPipelineTaskArguments - """ - - self._arguments = arguments - - @property - def dependencies(self) -> List[str]: - """Gets the dependencies of this ApiPipelineTask. - - Task dependencies, referring to upstream tasks that have to be completed prior to running this task by their respective task names # noqa: E501 - - :return: The dependencies of this ApiPipelineTask. - :rtype: List[str] - """ - return self._dependencies - - @dependencies.setter - def dependencies(self, dependencies: List[str]): - """Sets the dependencies of this ApiPipelineTask. - - Task dependencies, referring to upstream tasks that have to be completed prior to running this task by their respective task names # noqa: E501 - - :param dependencies: The dependencies of this ApiPipelineTask. - :type dependencies: List[str] - """ - - self._dependencies = dependencies diff --git a/api/server/swagger_server/models/api_pipeline_task_arguments.py b/api/server/swagger_server/models/api_pipeline_task_arguments.py deleted file mode 100644 index 321e6dcd..00000000 --- a/api/server/swagger_server/models/api_pipeline_task_arguments.py +++ /dev/null @@ -1,68 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_parameter import ApiParameter # noqa: F401,E501 -from swagger_server import util - - -class ApiPipelineTaskArguments(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, parameters: List[ApiParameter]=None): # noqa: E501 - """ApiPipelineTaskArguments - a model defined in Swagger - - :param parameters: The parameters of this ApiPipelineTaskArguments. # noqa: E501 - :type parameters: List[ApiParameter] - """ - self.swagger_types = { - 'parameters': List[ApiParameter] - } - - self.attribute_map = { - 'parameters': 'parameters' - } - - self._parameters = parameters - - @classmethod - def from_dict(cls, dikt) -> 'ApiPipelineTaskArguments': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiPipelineTaskArguments of this ApiPipelineTaskArguments. # noqa: E501 - :rtype: ApiPipelineTaskArguments - """ - return util.deserialize_model(dikt, cls) - - @property - def parameters(self) -> List[ApiParameter]: - """Gets the parameters of this ApiPipelineTaskArguments. - - - :return: The parameters of this ApiPipelineTaskArguments. - :rtype: List[ApiParameter] - """ - return self._parameters - - @parameters.setter - def parameters(self, parameters: List[ApiParameter]): - """Sets the parameters of this ApiPipelineTaskArguments. - - - :param parameters: The parameters of this ApiPipelineTaskArguments. - :type parameters: List[ApiParameter] - """ - - self._parameters = parameters diff --git a/api/server/swagger_server/models/api_run_code_response.py b/api/server/swagger_server/models/api_run_code_response.py deleted file mode 100644 index 3437a982..00000000 --- a/api/server/swagger_server/models/api_run_code_response.py +++ /dev/null @@ -1,99 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiRunCodeResponse(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, run_url: str=None, run_output_location: str=None): # noqa: E501 - """ApiRunCodeResponse - a model defined in Swagger - - :param run_url: The run_url of this ApiRunCodeResponse. # noqa: E501 - :type run_url: str - :param run_output_location: The run_output_location of this ApiRunCodeResponse. # noqa: E501 - :type run_output_location: str - """ - self.swagger_types = { - 'run_url': str, - 'run_output_location': str - } - - self.attribute_map = { - 'run_url': 'run_url', - 'run_output_location': 'run_output_location' - } - - self._run_url = run_url - self._run_output_location = run_output_location - - @classmethod - def from_dict(cls, dikt) -> 'ApiRunCodeResponse': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiRunCodeResponse of this ApiRunCodeResponse. # noqa: E501 - :rtype: ApiRunCodeResponse - """ - return util.deserialize_model(dikt, cls) - - @property - def run_url(self) -> str: - """Gets the run_url of this ApiRunCodeResponse. - - The URL path to view the run details in the Kubeflow Pipeline Web UI # noqa: E501 - - :return: The run_url of this ApiRunCodeResponse. - :rtype: str - """ - return self._run_url - - @run_url.setter - def run_url(self, run_url: str): - """Sets the run_url of this ApiRunCodeResponse. - - The URL path to view the run details in the Kubeflow Pipeline Web UI # noqa: E501 - - :param run_url: The run_url of this ApiRunCodeResponse. - :type run_url: str - """ - if run_url is None: - raise ValueError("Invalid value for `run_url`, must not be `None`") # noqa: E501 - - self._run_url = run_url - - @property - def run_output_location(self) -> str: - """Gets the run_output_location of this ApiRunCodeResponse. - - The location of the output artifacts produced by the run, if any. # noqa: E501 - - :return: The run_output_location of this ApiRunCodeResponse. - :rtype: str - """ - return self._run_output_location - - @run_output_location.setter - def run_output_location(self, run_output_location: str): - """Sets the run_output_location of this ApiRunCodeResponse. - - The location of the output artifacts produced by the run, if any. # noqa: E501 - - :param run_output_location: The run_output_location of this ApiRunCodeResponse. - :type run_output_location: str - """ - - self._run_output_location = run_output_location diff --git a/api/server/swagger_server/models/api_settings.py b/api/server/swagger_server/models/api_settings.py deleted file mode 100644 index ad1dffec..00000000 --- a/api/server/swagger_server/models/api_settings.py +++ /dev/null @@ -1,72 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_settings_section import ApiSettingsSection # noqa: F401,E501 -from swagger_server import util - - -class ApiSettings(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, sections: List[ApiSettingsSection]=None): # noqa: E501 - """ApiSettings - a model defined in Swagger - - :param sections: The sections of this ApiSettings. # noqa: E501 - :type sections: List[ApiSettingsSection] - """ - self.swagger_types = { - 'sections': List[ApiSettingsSection] - } - - self.attribute_map = { - 'sections': 'sections' - } - - self._sections = sections - - @classmethod - def from_dict(cls, dikt) -> 'ApiSettings': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiSettings of this ApiSettings. # noqa: E501 - :rtype: ApiSettings - """ - return util.deserialize_model(dikt, cls) - - @property - def sections(self) -> List[ApiSettingsSection]: - """Gets the sections of this ApiSettings. - - List of configuration categories. # noqa: E501 - - :return: The sections of this ApiSettings. - :rtype: List[ApiSettingsSection] - """ - return self._sections - - @sections.setter - def sections(self, sections: List[ApiSettingsSection]): - """Sets the sections of this ApiSettings. - - List of configuration categories. # noqa: E501 - - :param sections: The sections of this ApiSettings. - :type sections: List[ApiSettingsSection] - """ - if sections is None: - raise ValueError("Invalid value for `sections`, must not be `None`") # noqa: E501 - - self._sections = sections diff --git a/api/server/swagger_server/models/api_settings_section.py b/api/server/swagger_server/models/api_settings_section.py deleted file mode 100644 index aeaec9b1..00000000 --- a/api/server/swagger_server/models/api_settings_section.py +++ /dev/null @@ -1,128 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.api_parameter import ApiParameter # noqa: F401,E501 -from swagger_server import util - - -class ApiSettingsSection(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, name: str=None, description: str=None, settings: List[ApiParameter]=None): # noqa: E501 - """ApiSettingsSection - a model defined in Swagger - - :param name: The name of this ApiSettingsSection. # noqa: E501 - :type name: str - :param description: The description of this ApiSettingsSection. # noqa: E501 - :type description: str - :param settings: The settings of this ApiSettingsSection. # noqa: E501 - :type settings: List[ApiParameter] - """ - self.swagger_types = { - 'name': str, - 'description': str, - 'settings': List[ApiParameter] - } - - self.attribute_map = { - 'name': 'name', - 'description': 'description', - 'settings': 'settings' - } - - self._name = name - self._description = description - self._settings = settings - - @classmethod - def from_dict(cls, dikt) -> 'ApiSettingsSection': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiSettingsSection of this ApiSettingsSection. # noqa: E501 - :rtype: ApiSettingsSection - """ - return util.deserialize_model(dikt, cls) - - @property - def name(self) -> str: - """Gets the name of this ApiSettingsSection. - - Display name of the configuration category. # noqa: E501 - - :return: The name of this ApiSettingsSection. - :rtype: str - """ - return self._name - - @name.setter - def name(self, name: str): - """Sets the name of this ApiSettingsSection. - - Display name of the configuration category. # noqa: E501 - - :param name: The name of this ApiSettingsSection. - :type name: str - """ - if name is None: - raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501 - - self._name = name - - @property - def description(self) -> str: - """Gets the description of this ApiSettingsSection. - - Display text of the configuration category. # noqa: E501 - - :return: The description of this ApiSettingsSection. - :rtype: str - """ - return self._description - - @description.setter - def description(self, description: str): - """Sets the description of this ApiSettingsSection. - - Display text of the configuration category. # noqa: E501 - - :param description: The description of this ApiSettingsSection. - :type description: str - """ - - self._description = description - - @property - def settings(self) -> List[ApiParameter]: - """Gets the settings of this ApiSettingsSection. - - List of settings. # noqa: E501 - - :return: The settings of this ApiSettingsSection. - :rtype: List[ApiParameter] - """ - return self._settings - - @settings.setter - def settings(self, settings: List[ApiParameter]): - """Sets the settings of this ApiSettingsSection. - - List of settings. # noqa: E501 - - :param settings: The settings of this ApiSettingsSection. - :type settings: List[ApiParameter] - """ - - self._settings = settings diff --git a/api/server/swagger_server/models/api_status.py b/api/server/swagger_server/models/api_status.py deleted file mode 100644 index 2a6dda2d..00000000 --- a/api/server/swagger_server/models/api_status.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.protobuf_any import ProtobufAny # noqa: F401,E501 -from swagger_server import util - - -class ApiStatus(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, error: str=None, code: int=None, details: List[ProtobufAny]=None): # noqa: E501 - """ApiStatus - a model defined in Swagger - - :param error: The error of this ApiStatus. # noqa: E501 - :type error: str - :param code: The code of this ApiStatus. # noqa: E501 - :type code: int - :param details: The details of this ApiStatus. # noqa: E501 - :type details: List[ProtobufAny] - """ - self.swagger_types = { - 'error': str, - 'code': int, - 'details': List[ProtobufAny] - } - - self.attribute_map = { - 'error': 'error', - 'code': 'code', - 'details': 'details' - } - - self._error = error - self._code = code - self._details = details - - @classmethod - def from_dict(cls, dikt) -> 'ApiStatus': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiStatus of this ApiStatus. # noqa: E501 - :rtype: ApiStatus - """ - return util.deserialize_model(dikt, cls) - - @property - def error(self) -> str: - """Gets the error of this ApiStatus. - - - :return: The error of this ApiStatus. - :rtype: str - """ - return self._error - - @error.setter - def error(self, error: str): - """Sets the error of this ApiStatus. - - - :param error: The error of this ApiStatus. - :type error: str - """ - - self._error = error - - @property - def code(self) -> int: - """Gets the code of this ApiStatus. - - - :return: The code of this ApiStatus. - :rtype: int - """ - return self._code - - @code.setter - def code(self, code: int): - """Sets the code of this ApiStatus. - - - :param code: The code of this ApiStatus. - :type code: int - """ - - self._code = code - - @property - def details(self) -> List[ProtobufAny]: - """Gets the details of this ApiStatus. - - - :return: The details of this ApiStatus. - :rtype: List[ProtobufAny] - """ - return self._details - - @details.setter - def details(self, details: List[ProtobufAny]): - """Sets the details of this ApiStatus. - - - :param details: The details of this ApiStatus. - :type details: List[ProtobufAny] - """ - - self._details = details diff --git a/api/server/swagger_server/models/api_url.py b/api/server/swagger_server/models/api_url.py deleted file mode 100644 index 71d64c33..00000000 --- a/api/server/swagger_server/models/api_url.py +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server import util - - -class ApiUrl(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, pipeline_url: str=None): # noqa: E501 - """ApiUrl - a model defined in Swagger - - :param pipeline_url: The pipeline_url of this ApiUrl. # noqa: E501 - :type pipeline_url: str - """ - self.swagger_types = { - 'pipeline_url': str - } - - self.attribute_map = { - 'pipeline_url': 'pipeline_url' - } - - self._pipeline_url = pipeline_url - - @classmethod - def from_dict(cls, dikt) -> 'ApiUrl': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The apiUrl of this ApiUrl. # noqa: E501 - :rtype: ApiUrl - """ - return util.deserialize_model(dikt, cls) - - @property - def pipeline_url(self) -> str: - """Gets the pipeline_url of this ApiUrl. - - - :return: The pipeline_url of this ApiUrl. - :rtype: str - """ - return self._pipeline_url - - @pipeline_url.setter - def pipeline_url(self, pipeline_url: str): - """Sets the pipeline_url of this ApiUrl. - - - :param pipeline_url: The pipeline_url of this ApiUrl. - :type pipeline_url: str - """ - - self._pipeline_url = pipeline_url diff --git a/api/server/swagger_server/models/base_model_.py b/api/server/swagger_server/models/base_model_.py deleted file mode 100644 index 6e3d52c5..00000000 --- a/api/server/swagger_server/models/base_model_.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -import pprint - -import six -import typing - -from datetime import datetime -from swagger_server import util - -T = typing.TypeVar('T') - - -class Model(object): - # swaggerTypes: The key is attribute name and the - # value is attribute type. - swagger_types = {} - - # attributeMap: The key is attribute name and the - # value is json key in definition. - attribute_map = {} - - @classmethod - def from_dict(cls: typing.Type[T], dikt) -> T: - """Returns the dict as a model""" - return util.deserialize_model(dikt, cls) - - def to_dict(self): - """Returns the model properties as a dict - - :rtype: dict - """ - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - elif isinstance(value, datetime): - result[attr] = value.isoformat() - else: - result[attr] = value - - return result - - def to_str(self): - """Returns the string representation of the model - - :rtype: str - """ - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/api/server/swagger_server/models/dictionary.py b/api/server/swagger_server/models/dictionary.py deleted file mode 100644 index 652bea8b..00000000 --- a/api/server/swagger_server/models/dictionary.py +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -from swagger_server.models.any_value import AnyValue # noqa: F401,E501 -from swagger_server import util - - -class Dictionary(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self): # noqa: E501 - """Dictionary - a model defined in Swagger - - """ - self.swagger_types = { - } - - self.attribute_map = { - } - - @classmethod - def from_dict(cls, dikt) -> 'Dictionary': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The dictionary of this Dictionary. # noqa: E501 - :rtype: Dictionary - """ - return util.deserialize_model(dikt, cls) diff --git a/api/server/swagger_server/models/protobuf_any.py b/api/server/swagger_server/models/protobuf_any.py deleted file mode 100644 index 437487cf..00000000 --- a/api/server/swagger_server/models/protobuf_any.py +++ /dev/null @@ -1,101 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import -from datetime import date, datetime # noqa: F401 - -from typing import List, Dict # noqa: F401 - -from swagger_server.models.base_model_ import Model -# from swagger_server.models.byte_array import ByteArray # noqa: F401,E501 -import re # noqa: F401,E501 -from swagger_server import util - - -class ProtobufAny(Model): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - - def __init__(self, type_url: str=None, value:object=None): # noqa: E501 - """ProtobufAny - a model defined in Swagger - - :param type_url: The type_url of this ProtobufAny. # noqa: E501 - :type type_url: str - :param value: The value of this ProtobufAny. # noqa: E501 - :type value: ByteArray - """ - self.swagger_types = { - 'type_url': str, - 'value': object - } - - self.attribute_map = { - 'type_url': 'type_url', - 'value': 'value' - } - - self._type_url = type_url - self._value = value - - @classmethod - def from_dict(cls, dikt) -> 'ProtobufAny': - """Returns the dict as a model - - :param dikt: A dict. - :type: dict - :return: The protobufAny of this ProtobufAny. # noqa: E501 - :rtype: ProtobufAny - """ - return util.deserialize_model(dikt, cls) - - @property - def type_url(self) -> str: - """Gets the type_url of this ProtobufAny. - - TODO # noqa: E501 - - :return: The type_url of this ProtobufAny. - :rtype: str - """ - return self._type_url - - @type_url.setter - def type_url(self, type_url: str): - """Sets the type_url of this ProtobufAny. - - TODO # noqa: E501 - - :param type_url: The type_url of this ProtobufAny. - :type type_url: str - """ - - self._type_url = type_url - - @property - def value(self) -> object: - """Gets the value of this ProtobufAny. - - Must be a valid serialized protocol buffer of the above specified type. # noqa: E501 - - :return: The value of this ProtobufAny. - :rtype: ByteArray - """ - return self._value - - @value.setter - def value(self, value: object): - """Sets the value of this ProtobufAny. - - Must be a valid serialized protocol buffer of the above specified type. # noqa: E501 - - :param value: The value of this ProtobufAny. - :type value: ByteArray - """ - if value is not None and not re.search(r'^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$', value): # noqa: E501 - raise ValueError("Invalid value for `value`, must be a follow pattern or equal to `/^(?:[A-Za-z0-9+\/]{4})*(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/`") # noqa: E501 - - self._value = value diff --git a/api/server/swagger_server/swagger/swagger.yaml b/api/server/swagger_server/swagger/swagger.yaml deleted file mode 100644 index 8be21bf3..00000000 --- a/api/server/swagger_server/swagger/swagger.yaml +++ /dev/null @@ -1,3176 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 ---- -swagger: "2.0" -info: - description: "MLX API Extension for Kubeflow Pipelines" - version: "0.1.30-upload-catalog-from-url" - title: "MLX API" -basePath: "/apis/v1alpha1" -schemes: -- "http" -paths: - /health_check: - get: - tags: - - "HealthCheck" - summary: "Checks if the server is running" - operationId: "health_check" - parameters: - - name: "check_database" - in: "query" - description: "Test connection to MySQL database" - required: false - type: "boolean" - allowEmptyValue: true - - name: "check_object_store" - in: "query" - description: "Test connection to Minio object store" - required: false - type: "boolean" - allowEmptyValue: true - responses: - "200": - description: "Server is healthy" - default: - description: "Something is wrong" - schema: - $ref: "#/definitions/apiStatus" - security: [] - x-swagger-router-controller: "swagger_server.controllers.health_check_controller" - /settings: - get: - tags: - - "ApplicationSettings" - description: "Returns the application settings." - operationId: "get_application_settings" - produces: - - "application/json" - parameters: [] - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiSettings" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.application_settings_controller" - post: - tags: - - "ApplicationSettings" - description: "Set and store the application settings." - operationId: "set_application_settings" - consumes: - - "application/json" - produces: - - "application/json" - parameters: - - in: "body" - name: "settings" - required: true - schema: - $ref: "#/definitions/apiSettings" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiSettings" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.application_settings_controller" - put: - tags: - - "ApplicationSettings" - description: "Modify one or more of the application settings." - operationId: "modify_application_settings" - consumes: - - "application/json" - produces: - - "application/json" - parameters: - - in: "body" - name: "dictionary" - description: "A dictionary where the name of the keys corresponds to the name\ - \ of the settings." - required: true - schema: - $ref: "#/definitions/dictionary" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiSettings" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.application_settings_controller" - /catalog: - get: - tags: - - "CatalogService" - operationId: "list_all_assets" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that\ - \ correspond to the ApiComponent's attribute names and their respective\ - \ values to be filtered for." - required: false - type: "string" - x-nullable: true - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiListCatalogItemsResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.catalog_service_controller" - post: - tags: - - "CatalogService" - operationId: "upload_multiple_assets" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiCatalogUpload" - responses: - "201": - description: "All objects were created successfully." - schema: - $ref: "#/definitions/apiCatalogUploadResponse" - "207": - description: "Some objects were created successfully, some errors occurred." - schema: - $ref: "#/definitions/apiCatalogUploadResponse" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.catalog_service_controller" - /catalog/upload_from_url: - post: - tags: - - "CatalogService" - operationId: "upload_catalog_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - in: "formData" - description: "URL pointing to the catalog YAML file." - required: true - type: "string" - - name: "access_token" - in: "formData" - description: "Optional, the Bearer token to access the 'url'." - required: false - type: "string" - responses: - 201: - description: "All objects were created successfully." - schema: - $ref: "#/definitions/apiCatalogUploadResponse" - 207: - description: "Some objects were created successfully, some errors occurred." - schema: - $ref: "#/definitions/apiCatalogUploadResponse" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.catalog_service_controller" - /components: - get: - tags: - - "ComponentService" - operationId: "list_components" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that\ - \ correspond to the ApiComponent's attribute names and their respective\ - \ values to be filtered for." - required: false - type: "string" - x-nullable: true - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiListComponentsResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - post: - tags: - - "ComponentService" - operationId: "create_component" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiComponent" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiComponent" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /components/{id}: - get: - tags: - - "ComponentService" - operationId: "get_component" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiComponent" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - delete: - tags: - - "ComponentService" - operationId: "delete_component" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "204": - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /components/{id}/download: - get: - tags: - - "ComponentService" - summary: "Returns the component artifacts compressed into a .tgz (.tar.gz) file." - operationId: "download_component_files" - produces: - - "application/gzip" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "include_generated_code" - in: "query" - description: "Include generated run script in download" - required: false - type: "boolean" - default: false - allowEmptyValue: true - responses: - "200": - description: "A TGZ file containing the component artifacts." - schema: - type: "file" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /components/{id}/generate_code: - get: - tags: - - "ComponentService" - description: "Generate sample code to use component in a pipeline" - operationId: "generate_component_code" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiGenerateCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /components/{id}/run: - post: - tags: - - "ComponentService" - operationId: "run_component" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - in: "body" - name: "parameters" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/apiParameter" - - name: "run_name" - in: "query" - description: "name to identify the run on the Kubeflow Pipelines UI, defaults\ - \ to component name" - required: false - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /components/{id}/templates: - get: - tags: - - "ComponentService" - operationId: "get_component_template" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiGetTemplateResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /components/upload: - post: - tags: - - "ComponentService" - operationId: "upload_component" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The component YAML file to upload. Can be a GZip-compressed\ - \ TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is\ - \ 32MB." - required: true - type: "file" - - name: "name" - in: "query" - required: false - type: "string" - responses: - "201": - description: "Component was created successfully" - schema: - $ref: "#/definitions/apiComponent" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /components/upload_from_url: - post: - tags: - - "ComponentService" - operationId: "upload_component_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - in: "formData" - description: "URL pointing to the component YAML file." - required: true - type: "string" - - name: "name" - in: "query" - description: "Optional, the name of the component to be created overriding\ - \ the name in the YAML file." - required: false - type: "string" - - name: "access_token" - in: "formData" - description: "Optional, the Bearer token to access the 'url'." - required: false - type: "string" - responses: - "201": - description: "Component was created successfully." - schema: - $ref: "#/definitions/apiComponent" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /components/{id}/upload: - post: - tags: - - "ComponentService" - operationId: "upload_component_file" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "id" - in: "path" - description: "The id of the component." - required: true - type: "string" - - name: "uploadfile" - in: "formData" - description: "The file to upload, overwriting existing. Can be a GZip-compressed\ - \ TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown\ - \ file (.md)" - required: true - type: "file" - responses: - "204": - description: "" - schema: - $ref: "#/definitions/apiComponent" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /components/featured: - post: - tags: - - "ComponentService" - operationId: "set_featured_components" - parameters: - - in: "body" - name: "component_ids" - description: "Array of component IDs to be featured." - required: true - schema: - type: "array" - items: - type: "string" - responses: - "200": - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /components/publish_approved: - post: - tags: - - "ComponentService" - operationId: "approve_components_for_publishing" - parameters: - - in: "body" - name: "component_ids" - description: "Array of component IDs to be approved for publishing." - required: true - schema: - type: "array" - items: - type: "string" - responses: - "200": - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.component_service_controller" - /credentials: - get: - tags: - - "CredentialService" - operationId: "list_credentials" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that\ - \ correspond to the Credential's attribute names and their respective values\ - \ to be filtered for." - required: false - type: "string" - x-nullable: true - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiListCredentialsResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.credential_service_controller" - post: - tags: - - "CredentialService" - description: "Creates a credential associated with a pipeline." - operationId: "create_credential" - consumes: - - "application/json" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiCredential" - responses: - "201": - description: "The credential was created." - schema: - $ref: "#/definitions/apiCredential" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.credential_service_controller" - /credentials/{id}: - get: - tags: - - "CredentialService" - operationId: "get_credential" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiCredential" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.credential_service_controller" - delete: - tags: - - "CredentialService" - operationId: "delete_credential" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "204": - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.credential_service_controller" - /datasets: - get: - tags: - - "DatasetService" - operationId: "list_datasets" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of 'field_name', 'field_name asc' or 'field_name\ - \ desc'. Ascending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary containing key-value pairs\ - \ with name of the object property to apply filter on and the value of the\ - \ respective property." - required: false - type: "string" - x-nullable: true - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiListDatasetsResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - post: - tags: - - "DatasetService" - operationId: "create_dataset" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiDataset" - responses: - "201": - description: "A successful response." - schema: - $ref: "#/definitions/apiDataset" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /datasets/{id}: - get: - tags: - - "DatasetService" - operationId: "get_dataset" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiDataset" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - delete: - tags: - - "DatasetService" - operationId: "delete_dataset" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "204": - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /datasets/{id}/download: - get: - tags: - - "DatasetService" - summary: "Returns the dataset artifacts compressed into a .tgz (.tar.gz) file." - operationId: "download_dataset_files" - produces: - - "application/gzip" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "include_generated_code" - in: "query" - description: "Include generated run script in download" - required: false - type: "boolean" - default: false - allowEmptyValue: true - responses: - "200": - description: "A TGZ file containing the dataset artifacts." - schema: - type: "file" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /datasets/{id}/generate_code: - get: - tags: - - "DatasetService" - description: "Generate sample code to use dataset in a pipeline" - operationId: "generate_dataset_code" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiGenerateCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /datasets/{id}/run: - post: - tags: - - "DatasetService" - operationId: "run_dataset" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - in: "body" - name: "parameters" - required: false - schema: - type: "array" - items: - $ref: "#/definitions/apiParameter" - - name: "run_name" - in: "query" - description: "name to identify the run on the Kubeflow Pipelines UI, defaults\ - \ to component name" - required: false - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /datasets/{id}/templates: - get: - tags: - - "DatasetService" - operationId: "get_dataset_template" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiGetTemplateResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /datasets/upload: - post: - tags: - - "DatasetService" - operationId: "upload_dataset" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The dataset YAML file to upload. Can be a GZip-compressed TAR\ - \ file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB." - required: true - type: "file" - - name: "name" - in: "query" - required: false - type: "string" - responses: - "201": - description: "" - schema: - $ref: "#/definitions/apiDataset" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /datasets/upload_from_url: - post: - tags: - - "DatasetService" - operationId: "upload_dataset_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - in: "formData" - description: "URL pointing to the dataset YAML file." - required: true - type: "string" - - name: "name" - in: "query" - description: "Optional, the name of the dataset to be created overriding the\ - \ name in the YAML file." - required: false - type: "string" - - name: "access_token" - in: "formData" - description: "Optional, the Bearer token to access the 'url'." - required: false - type: "string" - responses: - "201": - description: "Dataset was created successfully." - schema: - $ref: "#/definitions/apiDataset" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /datasets/{id}/upload: - post: - tags: - - "DatasetService" - operationId: "upload_dataset_file" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "id" - in: "path" - description: "The id of the dataset." - required: true - type: "string" - - name: "uploadfile" - in: "formData" - description: "The file to upload, overwriting existing. Can be a GZip-compressed\ - \ TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown\ - \ file (.md)" - required: true - type: "file" - responses: - "204": - description: "" - schema: - $ref: "#/definitions/apiDataset" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /datasets/featured: - post: - tags: - - "DatasetService" - operationId: "set_featured_datasets" - parameters: - - in: "body" - name: "dataset_ids" - description: "Array of dataset IDs to be featured." - required: true - schema: - type: "array" - items: - type: "string" - responses: - "200": - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /datasets/publish_approved: - post: - tags: - - "DatasetService" - operationId: "approve_datasets_for_publishing" - parameters: - - in: "body" - name: "dataset_ids" - description: "Array of dataset IDs to be approved for publishing." - required: true - schema: - type: "array" - items: - type: "string" - responses: - "200": - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.dataset_service_controller" - /inferenceservices: - get: - tags: - - "InferenceService" - operationId: "list_inferenceservices" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that\ - \ correspond to the InferenceService's attribute names and their respective\ - \ values to be filtered for." - required: false - type: "string" - x-nullable: true - - name: "namespace" - in: "query" - required: false - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiListInferenceservicesResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.inference_service_controller" - post: - tags: - - "InferenceService" - operationId: "create_service" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiInferenceservice" - - name: "namespace" - in: "query" - required: false - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiInferenceservice" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.inference_service_controller" - /inferenceservices/{id}: - get: - tags: - - "InferenceService" - operationId: "get_inferenceservices" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "namespace" - in: "query" - required: false - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiInferenceservice" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.inference_service_controller" - /inferenceservices/upload: - post: - tags: - - "InferenceService" - operationId: "upload_service" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The inference service metadata to upload. Maximum size of 32MB\ - \ is supported." - required: true - type: "file" - - name: "name" - in: "query" - required: false - type: "string" - - name: "namespace" - in: "query" - required: false - type: "string" - responses: - "200": - description: "" - schema: - $ref: "#/definitions/apiInferenceservice" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.inference_service_controller" - /models: - get: - tags: - - "ModelService" - operationId: "list_models" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that\ - \ correspond to the Model's attribute names and their respective values\ - \ to be filtered for." - required: false - type: "string" - x-nullable: true - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiListModelsResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - post: - tags: - - "ModelService" - operationId: "create_model" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiModel" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiModel" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /models/{id}: - get: - tags: - - "ModelService" - operationId: "get_model" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiModel" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - delete: - tags: - - "ModelService" - operationId: "delete_model" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "204": - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /models/{id}/download: - get: - tags: - - "ModelService" - summary: "Returns the model artifacts compressed into a .tgz (.tar.gz) file." - operationId: "download_model_files" - produces: - - "application/gzip" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "include_generated_code" - in: "query" - description: "Include generated run scripts in download" - required: false - type: "boolean" - default: false - allowEmptyValue: true - responses: - "200": - description: "A TGZ file containing the model artifacts." - schema: - type: "file" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /models/{id}/generate_code: - get: - tags: - - "ModelService" - operationId: "generate_model_code" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiGenerateModelCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /models/{id}/run: - post: - tags: - - "ModelService" - operationId: "run_model" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "pipeline_stage" - in: "query" - description: "pipeline stage, either 'train' or 'serve'" - required: true - type: "string" - enum: - - "train" - - "serve" - - name: "execution_platform" - in: "query" - description: "execution platform, i.e. 'kubernetes', 'knative'" - required: true - type: "string" - - name: "run_name" - in: "query" - description: "name to identify the run on the Kubeflow Pipelines UI, defaults\ - \ to model identifier" - required: false - type: "string" - - in: "body" - name: "parameters" - description: "optional run parameters, must include 'github_url' and 'github_token'\ - \ if credentials are required" - required: false - schema: - $ref: "#/definitions/dictionary" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /models/{id}/templates: - get: - tags: - - "ModelService" - operationId: "get_model_template" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiGetTemplateResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /models/upload: - post: - tags: - - "ModelService" - operationId: "upload_model" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The model YAML file to upload. Can be a GZip-compressed TAR\ - \ file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB." - required: true - type: "file" - - name: "name" - in: "query" - required: false - type: "string" - responses: - "201": - description: "" - schema: - $ref: "#/definitions/apiModel" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /models/upload_from_url: - post: - tags: - - "ModelService" - operationId: "upload_model_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - in: "formData" - description: "URL pointing to the model YAML file." - required: true - type: "string" - - name: "name" - in: "query" - description: "Optional, the name of the model to be created overriding the\ - \ name in the YAML file." - required: false - type: "string" - - name: "access_token" - in: "formData" - description: "Optional, the Bearer token to access the 'url'." - required: false - type: "string" - responses: - "201": - description: "Model was created successfully." - schema: - $ref: "#/definitions/apiModel" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /models/{id}/upload: - post: - tags: - - "ModelService" - operationId: "upload_model_file" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "id" - in: "path" - description: "The model identifier." - required: true - type: "string" - - name: "uploadfile" - in: "formData" - description: "The file to upload, overwriting existing. Can be a GZip-compressed\ - \ TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown\ - \ file (.md)" - required: true - type: "file" - responses: - "204": - description: "" - schema: - $ref: "#/definitions/apiModel" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /models/featured: - post: - tags: - - "ModelService" - operationId: "set_featured_models" - parameters: - - in: "body" - name: "model_ids" - description: "Array of model IDs to be featured." - required: true - schema: - type: "array" - items: - type: "string" - responses: - "200": - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /models/publish_approved: - post: - tags: - - "ModelService" - operationId: "approve_models_for_publishing" - parameters: - - in: "body" - name: "model_ids" - description: "Array of model IDs to be approved for publishing." - required: true - schema: - type: "array" - items: - type: "string" - responses: - "200": - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.model_service_controller" - /notebooks: - get: - tags: - - "NotebookService" - operationId: "list_notebooks" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that\ - \ correspond to the Notebook's attribute names and their respective values\ - \ to be filtered for." - required: false - type: "string" - x-nullable: true - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiListNotebooksResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - post: - tags: - - "NotebookService" - operationId: "create_notebook" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiNotebook" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiNotebook" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /notebooks/{id}: - get: - tags: - - "NotebookService" - operationId: "get_notebook" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiNotebook" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - delete: - tags: - - "NotebookService" - operationId: "delete_notebook" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "204": - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /notebooks/{id}/download: - get: - tags: - - "NotebookService" - summary: "Returns the notebook artifacts compressed into a .tgz (.tar.gz) file." - operationId: "download_notebook_files" - produces: - - "application/gzip" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "include_generated_code" - in: "query" - description: "Include generated run script in download" - required: false - type: "boolean" - default: false - allowEmptyValue: true - responses: - "200": - description: "A TGZ file containing the notebook artifacts." - schema: - type: "file" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /notebooks/{id}/generate_code: - get: - tags: - - "NotebookService" - description: "Generate sample code to use notebook in a pipeline" - operationId: "generate_notebook_code" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiGenerateCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /notebooks/{id}/run: - post: - tags: - - "NotebookService" - operationId: "run_notebook" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "run_name" - in: "query" - description: "name to identify the run on the Kubeflow Pipelines UI, defaults\ - \ to notebook name" - required: false - type: "string" - - in: "body" - name: "parameters" - description: "optional run parameters, may be required based on pipeline definition" - required: false - schema: - $ref: "#/definitions/dictionary" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /notebooks/{id}/templates: - get: - tags: - - "NotebookService" - operationId: "get_notebook_template" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiGetTemplateResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /notebooks/upload: - post: - tags: - - "NotebookService" - operationId: "upload_notebook" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The notebook metadata YAML file to upload. Can be a GZip-compressed\ - \ TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is\ - \ 32MB." - required: true - type: "file" - - name: "name" - in: "query" - required: false - type: "string" - - name: "enterprise_github_token" - in: "formData" - description: "Optional GitHub API token providing read-access to notebooks\ - \ stored on Enterprise GitHub accounts." - required: false - type: "string" - responses: - "201": - description: "" - schema: - $ref: "#/definitions/apiNotebook" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /notebooks/upload_from_url: - post: - tags: - - "NotebookService" - operationId: "upload_notebook_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - in: "formData" - description: "URL pointing to the notebook YAML file." - required: true - type: "string" - - name: "name" - in: "query" - description: "Optional, the name of the notebook to be created overriding\ - \ the name in the YAML file." - required: false - type: "string" - - name: "access_token" - in: "formData" - description: "Optional, the Bearer token to access the 'url'." - required: false - type: "string" - responses: - "201": - description: "Notebook was created successfully." - schema: - $ref: "#/definitions/apiNotebook" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /notebooks/{id}/upload: - post: - tags: - - "NotebookService" - operationId: "upload_notebook_file" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "id" - in: "path" - description: "The id of the notebook." - required: true - type: "string" - - name: "uploadfile" - in: "formData" - description: "The file to upload, overwriting existing. Can be a GZip-compressed\ - \ TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown\ - \ file (.md)" - required: true - type: "file" - responses: - "204": - description: "" - schema: - $ref: "#/definitions/apiNotebook" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /notebooks/featured: - post: - tags: - - "NotebookService" - operationId: "set_featured_notebooks" - parameters: - - in: "body" - name: "notebook_ids" - description: "Array of notebook IDs to be featured." - required: true - schema: - type: "array" - items: - type: "string" - responses: - "200": - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /notebooks/publish_approved: - post: - tags: - - "NotebookService" - operationId: "approve_notebooks_for_publishing" - parameters: - - in: "body" - name: "notebook_ids" - description: "Array of notebook IDs to be approved for publishing." - required: true - schema: - type: "array" - items: - type: "string" - responses: - "200": - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.notebook_service_controller" - /pipelines: - get: - tags: - - "PipelineService" - operationId: "list_pipelines" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that\ - \ correspond to the Pipeline's attribute names and their respective values\ - \ to be filtered for." - required: false - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiListPipelinesResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - post: - tags: - - "PipelineService" - operationId: "create_pipeline" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiPipeline" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiPipeline" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - /pipelines/{id}: - get: - tags: - - "PipelineService" - operationId: "get_pipeline" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiPipelineExtended" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - delete: - tags: - - "PipelineService" - operationId: "delete_pipeline" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "204": - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - /pipelines/{id}/download: - get: - tags: - - "PipelineService" - summary: "Returns the pipeline YAML compressed into a .tgz (.tar.gz) file." - operationId: "download_pipeline_files" - produces: - - "application/gzip" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A TGZ file containing the component artifacts." - schema: - type: "file" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - /pipelines/{id}/run: - post: - tags: - - "PipelineService" - operationId: "run_pipeline" - consumes: - - "application/json" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "run_name" - in: "query" - description: "name to identify the run on the Kubeflow Pipelines UI, defaults\ - \ to pipeline name" - required: false - type: "string" - - in: "body" - name: "parameters" - description: "optional run parameters, may be required based on pipeline definition" - required: false - schema: - $ref: "#/definitions/dictionary" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - /pipelines/{id}/templates: - get: - tags: - - "PipelineService" - operationId: "get_template" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiGetTemplateResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - /pipelines/upload: - post: - tags: - - "PipelineService" - operationId: "upload_pipeline" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The pipeline YAML file to upload. Can be a GZip-compressed TAR\ - \ file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB." - required: true - type: "file" - - name: "name" - in: "query" - description: "A name for this pipeline, optional" - required: false - type: "string" - - name: "description" - in: "query" - description: "A description for this pipeline, optional" - required: false - type: "string" - - name: "annotations" - in: "formData" - description: "A string representation of a JSON dictionary of annotations\ - \ describing this pipeline, optional. Example: {\"platform\": \"Kubeflow\"\ - , \"license\": \"Opensource\"}" - required: false - type: "string" - responses: - "201": - description: "" - schema: - $ref: "#/definitions/apiPipelineExtended" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - /pipelines/upload_from_url: - post: - tags: - - "PipelineService" - operationId: "upload_pipeline_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - in: "formData" - description: "URL pointing to the pipeline YAML file." - required: true - type: "string" - - name: "name" - in: "query" - description: "Optional, the name of the pipeline to be created overriding\ - \ the name in the YAML file." - required: false - type: "string" - - name: "access_token" - in: "formData" - description: "Optional, the Bearer token to access the 'url'." - required: false - type: "string" - responses: - "201": - description: "Pipeline was created successfully." - schema: - $ref: "#/definitions/apiPipeline" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - /pipelines/featured: - post: - tags: - - "PipelineService" - operationId: "set_featured_pipelines" - parameters: - - in: "body" - name: "pipeline_ids" - description: "Array of pipeline IDs to be featured." - required: true - schema: - type: "array" - items: - type: "string" - responses: - "200": - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - /pipelines/publish_approved: - post: - tags: - - "PipelineService" - operationId: "approve_pipelines_for_publishing" - parameters: - - in: "body" - name: "pipeline_ids" - description: "Array of pipeline IDs to be approved for publishing." - required: true - schema: - type: "array" - items: - type: "string" - responses: - "200": - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" - /pipelines/run_custom_pipeline: - post: - tags: - - "PipelineService" - description: "Run a complex pipeline defined by a directed acyclic graph (DAG)" - operationId: "run_custom_pipeline" - consumes: - - "application/json" - parameters: - - in: "body" - name: "run_custom_pipeline_payload" - description: "A custom pipeline defined by a directed acyclic graph (DAG)\ - \ and input parameters" - required: true - schema: - $ref: "#/definitions/apiPipelineCustomRunPayload" - - name: "run_name" - in: "query" - description: "Name to identify the run on the Kubeflow Pipelines UI" - required: false - type: "string" - responses: - "200": - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - x-swagger-router-controller: "swagger_server.controllers.pipeline_service_controller" -definitions: - apiAccessToken: - type: "object" - required: - - "api_token" - - "url_host" - properties: - api_token: - type: "string" - description: "A read-only API access token." - url_host: - type: "string" - description: "The API server host that this API token applies to." - example: - api_token: "T0K3N123" - url_host: "github.ibm.com" - apiAsset: - type: "object" - required: - - "description" - - "name" - properties: - id: - type: "string" - created_at: - type: "string" - format: "date-time" - name: - type: "string" - description: - type: "string" - featured: - type: "boolean" - publish_approved: - type: "boolean" - related_assets: - type: "array" - items: - type: "string" - filter_categories: - type: "object" - additionalProperties: - type: "string" - description: "Abstract asset with properties shared across all MLX asset types (except pipelines)." - example: - id: "05au-84nr-1tey-0qwr" - created_at: "2019-01-23T04:56:07.000+00:00" - name: "Image Recognition Model" - description: "A machine learning model to identify objects in images" - filter_categories: - domain: image-recognition - platform: - - kubernetes - - kfserving - language: python - apiCatalogUpload: - type: "object" - properties: - api_access_tokens: - type: "array" - description: "A mapping of read-only API access tokens to a partial URL." - items: - $ref: "#/definitions/apiAccessToken" - components: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadItem" - datasets: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadItem" - models: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadItem" - notebooks: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadItem" - pipelines: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadItem" - apiCatalogUploadItem: - type: "object" - required: - - "url" - properties: - name: - type: "string" - url: - type: "string" - description: "The URL to the YAML metadata file, i.e. on GitHub.com" - example: - name: "My awesome new asset" - url: "https://github.com/org/repo/blob/main/assets/my/awesome/new/asset.yaml" - apiCatalogUploadResponse: - allOf: - - $ref: "#/definitions/apiListCatalogItemsResponse" - - $ref: "#/definitions/apiListCatalogUploadErrors" - - properties: - total_created: - type: "integer" - format: "int32" - description: "A list of assets and/or errors created in response to a catalog\ - \ upload." - apiListCatalogUploadErrors: - type: "object" - properties: - errors: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadError" - total_errors: - type: "integer" - format: "int32" - apiCatalogUploadError: - allOf: - - $ref: "#/definitions/apiCatalogUploadItem" - - properties: - error_message: - type: "string" - status_code: - type: "integer" - format: "int32" - description: "A catalog upload error" - apiComponent: - allOf: - - $ref: "#/definitions/apiAsset" - - properties: - metadata: - $ref: "#/definitions/apiMetadata" - parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - description: "A Kubeflow Pipeline component." - example: - id: "id" - created_at: "2019-01-23T04:56:07.000+00:00" - name: "Deep Learning - Train Model" - description: "description" - metadata: - labels: - platform: "IBM Watson" - parameters: - - name: "model_filename" - value: "model.py" - - name: "data_filename" - value: "data.csv" - apiCredential: - type: "object" - required: - - "pipeline_id" - - "project_id" - properties: - id: - type: "string" - created_at: - type: "string" - format: "date-time" - pipeline_id: - type: "string" - project_id: - type: "string" - api_key: - type: "string" - description: "TODO: what is the api_key" - data_assets: - type: "array" - description: "List of data asset IDs" - items: - type: "string" - description: "A credentials object associated with a pipeline" - example: - pipeline_id: "eac1j24-0f2ndl-0a3pi3df" - project_id: "my-awesome-project-1214" - api_key: "api_key" - data_assets: - - "data_assets" - - "data_assets" - created_at: "2000-01-23T04:56:07.000+00:00" - id: "generated-guid-used-as-k8s-secret-name" - apiDataset: - allOf: - - $ref: "#/definitions/apiAsset" - - properties: - domain: - type: "string" - format: - type: "string" - size: - type: "string" - number_of_records: - type: "integer" - format: "int32" - license: - type: "string" - metadata: - $ref: "#/definitions/apiMetadata" - example: - id: "id" - created_at: "2020-09-15T04:56:07.000+00:00" - name: "Fashion-MNIST" - description: "Standardized images of fashion items from 10 classes" - format: "CSV" - size: "37MB" - number_of_records: 60000 - license: "MIT" - domain: "Image Classification" - apiGenerateCodeResponse: - type: "object" - properties: - script: - type: "string" - description: "The script source code to run the component in a pipeline" - example: - script: "TODO: Python source file content example" - apiGenerateModelCodeResponse: - type: "object" - properties: - scripts: - type: "array" - description: "The source code samples to use the model in a pipeline" - items: - $ref: "#/definitions/apiModelScript" - example: - scripts: - - pipeline_stage: "train" - execution_platform: "wml" - script_code: "TODO: python script example" - - pipeline_stage: "serve" - execution_platform: "kubernetes" - script_code: "TODO: python script example" - apiGetTemplateResponse: - type: "object" - properties: - template: - type: "string" - description: "The YAML template file content" - url: - type: "string" - description: "The URL to download the template text from S3 storage (Minio)" - example: - template: "TODO: YAML file content" - url: "http://min.io:9000/mlpipeline/components/1lBnSAce8lAXP97Yb11eqSk/train_wml.yaml" - apiListCatalogItemsResponse: - type: "object" - properties: - components: - type: "array" - items: - $ref: "#/definitions/apiComponent" - datasets: - type: "array" - items: - $ref: "#/definitions/apiDataset" - models: - type: "array" - items: - $ref: "#/definitions/apiModel" - notebooks: - type: "array" - items: - $ref: "#/definitions/apiNotebook" - pipelines: - type: "array" - items: - $ref: "#/definitions/apiPipeline" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - models: - - id: "max-audio-classifier" - created_at: "2019-04-23T04:56:07.000+00:00" - name: "Max Audio Classifier" - description: "Identify sounds in short audio clips" - labels: - domain: "speech recognition" - framework: - name: "tensorflow" - version: "1.8" - runtimes: - name: "python" - version: "3.5" - trainable: false - servable: true - - id: "max-audio-classifier" - created_at: "2019-04-23T04:56:07.000+00:00" - name: "Max Audio Classifier" - description: "Identify sounds in short audio clips" - labels: - domain: "speech recognition" - framework: - name: "tensorflow" - version: "1.8" - runtimes: - name: "python" - version: "3.5" - trainable: false - servable: true - components: - - id: "id" - created_at: "2019-01-23T04:56:07.000+00:00" - name: "Deep Learning - Train Model" - description: "description" - metadata: - labels: - platform: "IBM Watson" - parameters: - - name: "model_filename" - value: "model.py" - - name: "data_filename" - value: "data.csv" - - id: "id" - created_at: "2019-01-23T04:56:07.000+00:00" - name: "Deep Learning - Train Model" - description: "description" - metadata: - labels: - platform: "IBM Watson" - parameters: - - name: "model_filename" - value: "model.py" - - name: "data_filename" - value: "data.csv" - pipelines: - - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - status: "READY" - parameters: - - name: "name" - value: "value" - - name: "name" - value: "value" - - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - status: "READY" - parameters: - - name: "name" - value: "value" - - name: "name" - value: "value" - next_page_token: "next_page_token" - notebooks: - - id: "92jh4-2nf09-soaqm5" - created_at: "2019-07-15T14:56:07.000+00:00" - name: "My Notebook" - description: "Some text describing the notebook" - metadata: - annotations: - platform: "OpenSource" - - id: "92jh4-2nf09-soaqm5" - created_at: "2019-07-15T14:56:07.000+00:00" - name: "My Other Notebook" - description: "Some text describing the notebook" - metadata: - annotations: - platform: "OpenSource" - total_size: 0 - datasets: - - id: "id" - created_at: "2020-09-15T04:56:07.000+00:00" - name: "Fashion-MNIST" - description: "Standardized images of fashion items from 10 classes" - format: "CSV" - size: "37MB" - number_of_records: 60000 - license: "MIT" - domain: "Image Classification" - - id: "id" - created_at: "2020-09-15T04:56:07.000+00:00" - name: "Fashion-MNIST" - description: "Standardized images of fashion items from 10 classes" - format: "CSV" - size: "37MB" - number_of_records: 60000 - license: "MIT" - domain: "Image Classification" - apiListComponentsResponse: - type: "object" - properties: - components: - type: "array" - items: - $ref: "#/definitions/apiComponent" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - components: - - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - parameters: - - name: "name" - value: "value" - - name: "name" - value: "value" - - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - parameters: - - name: "name" - value: "value" - - name: "name" - value: "value" - next_page_token: "next_page_token" - total_size: 10 - apiListCredentialsResponse: - type: "object" - properties: - credentials: - type: "array" - items: - $ref: "#/definitions/apiCredential" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - next_page_token: "next_page_token" - credentials: - - pipeline_id: "eac1j24-0f2ndl-0a3pi3df" - project_id: "my-awesome-project-1214" - api_key: "api_key" - data_assets: - - "data_assets" - - "data_assets" - created_at: "2000-01-23T04:56:07.000+00:00" - id: "generated-guid-used-as-k8s-secret-name" - - pipeline_id: "eac1j24-0f2ndl-0a3pi3df" - project_id: "my-awesome-project-1214" - api_key: "api_key" - data_assets: - - "data_assets" - - "data_assets" - created_at: "2000-01-23T04:56:07.000+00:00" - id: "generated-guid-used-as-k8s-secret-name" - total_size: 0 - apiListDatasetsResponse: - type: "object" - properties: - datasets: - type: "array" - items: - $ref: "#/definitions/apiDataset" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - datasets: - - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - next_page_token: "next_page_token" - total_size: 2 - apiListModelsResponse: - type: "object" - properties: - models: - type: "array" - items: - $ref: "#/definitions/apiModel" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - models: - - id: "max-audio-classifier" - created_at: "2019-04-23T04:56:07.000+00:00" - name: "Max Audio Classifier" - description: "Identify sounds in short audio clips" - labels: - domain: "speech recognition" - framework: - name: "tensorflow" - version: "1.8" - runtimes: - name: "python" - version: "3.5" - trainable: false - servable: true - - id: "max-audio-classifier" - created_at: "2019-04-23T04:56:07.000+00:00" - name: "Max Audio Classifier" - description: "Identify sounds in short audio clips" - labels: - domain: "speech recognition" - framework: - name: "tensorflow" - version: "1.8" - runtimes: - name: "python" - version: "3.5" - trainable: false - servable: true - next_page_token: "next_page_token" - total_size: 0 - apiListInferenceservicesResponse: - type: "object" - properties: - Inferenceservices: - type: "array" - items: - $ref: "#/definitions/apiInferenceservice" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - next_page_token: "next_page_token" - total_size: 0 - Inferenceservices: - - apiVersion: "serving.kubeflow.org/v1alpha2" - kind: "InferenceService" - metadata: - name: "sklearn-iris" - spec: - default: - predictor: - sklearn: - storageUri: "gs://kfserving-samples/models/sklearn/iris" - - apiVersion: "serving.kubeflow.org/v1alpha2" - kind: "InferenceService" - metadata: - name: "sklearn-iris" - spec: - default: - predictor: - sklearn: - storageUri: "gs://kfserving-samples/models/sklearn/iris" - apiListNotebooksResponse: - type: "object" - properties: - notebooks: - type: "array" - items: - $ref: "#/definitions/apiNotebook" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - next_page_token: "next_page_token" - notebooks: - - id: "92jh4-2nf09-soaqm5" - created_at: "2019-07-15T14:56:07.000+00:00" - name: "My Notebook" - description: "Some text describing the notebook" - metadata: - annotations: - platform: "OpenSource" - - id: "92jh4-2nf09-soaqm5" - created_at: "2019-07-15T14:56:07.000+00:00" - name: "My Other Notebook" - description: "Some text describing the notebook" - metadata: - annotations: - platform: "OpenSource" - total_size: 0 - apiListPipelinesResponse: - type: "object" - properties: - pipelines: - type: "array" - items: - $ref: "#/definitions/apiPipelineExtended" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - pipelines: - - name: "name" - created_at: "2018-12-29T04:56:07.000+00:00" - description: "description" - id: "e3U42y3-au240nc-13nc" - status: "READY" - parameters: - - name: "name" - value: "value" - - name: "name" - value: "value" - - name: "another pipeline" - created_at: "2019-06-23T14:18:01.000+00:00" - description: "another pipeline" - id: "v92-834nat-2ndida" - annotations: - platform: "KFP" - next_page_token: "next_page_token" - total_size: 10 - apiMetadata: - type: "object" - properties: - annotations: - type: "object" - additionalProperties: - type: "string" - labels: - type: "object" - additionalProperties: - type: "string" - tags: - type: "array" - items: - type: "string" - example: - annotations: "{platform: 'IBM Watson'}" - tags: "['keras', 'tensorflow']" - apiInferenceservice: - type: "object" - required: - - "apiVersion" - - "kind" - properties: - apiVersion: - type: "string" - kind: - type: "string" - metadata: - $ref: "#/definitions/anyValue" - spec: - $ref: "#/definitions/anyValue" - example: - apiVersion: "serving.kubeflow.org/v1alpha2" - kind: "InferenceService" - metadata: - name: "sklearn-iris" - spec: - default: - predictor: - sklearn: - storageUri: "gs://kfserving-samples/models/sklearn/iris" - apiModel: - allOf: - - $ref: "#/definitions/apiAsset" - - type: "object" - required: - - "framework" - properties: - domain: - type: "string" - labels: - type: "object" - additionalProperties: - type: "string" - framework: - $ref: "#/definitions/apiModelFramework" - trainable: - type: "boolean" - trainable_tested_platforms: - type: "array" - items: - type: "string" - trainable_credentials_required: - type: "boolean" - trainable_parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - servable: - type: "boolean" - servable_tested_platforms: - type: "array" - items: - type: "string" - servable_credentials_required: - type: "boolean" - servable_parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - description: "A model that can be trained and/or served." - example: - id: "max-audio-classifier" - created_at: "2019-04-23T04:56:07.000+00:00" - name: "Max Audio Classifier" - description: "Identify sounds in short audio clips" - labels: - domain: "speech recognition" - framework: - name: "tensorflow" - version: "1.8" - runtimes: - name: "python" - version: "3.5" - trainable: false - servable: true - apiModelFramework: - type: "object" - required: - - "name" - properties: - name: - type: "string" - version: - type: "string" - runtimes: - $ref: "#/definitions/apiModelFramework_runtimes" - example: - name: "tensorflow" - version: "1.5" - runtimes: - name: "python" - version: "3.5" - apiModelScript: - type: "object" - required: - - "execution_platform" - - "pipeline_stage" - - "script_code" - properties: - pipeline_stage: - type: "string" - description: "pipeline stage that this code sample applies to, either 'train'\ - \ or 'serve'" - execution_platform: - type: "string" - description: "execution platform that this code sample applies to, i.e. 'kubernetes',\ - \ 'knative'" - script_code: - type: "string" - description: "the source code to run the model in a pipeline stage" - example: - pipeline_stage: "serve" - execution_platform: "kubernetes" - script_code: "TODO: python script example" - apiNotebook: - allOf: - - $ref: "#/definitions/apiAsset" - - required: - - "url" - properties: - url: - type: "string" - description: "The URL to the notebook source file (.ipynb) on GitHub.com" - metadata: - $ref: "#/definitions/apiMetadata" - parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - description: "A notebook component." - apiParameter: - type: "object" - required: - - "name" - properties: - name: - type: "string" - description: - type: "string" - default: - $ref: "#/definitions/anyValue" - value: - $ref: "#/definitions/anyValue" - example: - name: "name" - value: "value" - apiPipeline: - type: "object" - properties: - id: - type: "string" - created_at: - type: "string" - format: "date-time" - name: - type: "string" - description: - type: "string" - parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - status: - type: "string" - description: "In case any error happens retrieving a pipeline field, only\ - \ pipeline ID\nand the error message is returned. Client has the flexibility\ - \ of choosing\nhow to handle error. This is especially useful during listing\ - \ call." - default_version_id: - type: "string" - description: "The default version of the pipeline. As of now, the latest version\ - \ is used as default. (In the future, if desired by customers, we can allow\ - \ them to set default version.)" - readOnly: true - namespace: - type: "string" - example: - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - status: "READY" - parameters: - - name: "name" - value: "value" - - name: "name" - value: "value" - apiPipelineExtension: - type: "object" - properties: - id: - type: "string" - annotations: - type: "object" - additionalProperties: - type: "string" - featured: - type: "boolean" - publish_approved: - type: "boolean" - example: - id: "id" - annotations: - platform: "KFP" - apiPipelineExtended: - allOf: - - $ref: "#/definitions/apiPipeline" - - $ref: "#/definitions/apiPipelineExtension" - description: "A representation of a pipeline with extended properties." - apiPipelineCustomRunPayload: - type: "object" - properties: - custom_pipeline: - $ref: "#/definitions/apiPipelineCustom" - run_parameters: - $ref: "#/definitions/dictionary" - description: "Wrapper object to post a custom pipeline run defined by a directed\ - \ acyclic graph (DAG) and input parameters." - apiPipelineCustom: - type: "object" - required: - - "dag" - - "name" - properties: - dag: - $ref: "#/definitions/apiPipelineDAG" - inputs: - $ref: "#/definitions/apiPipelineInputs" - name: - type: "string" - description: "Name of the custom pipeline" - description: - type: "string" - description: "Optional description of the custom pipeline" - description: "A custom pipeline defined by a directed acyclic graph (DAG) and\ - \ input parameters." - apiPipelineInputs: - type: "object" - properties: - parameters: - type: "array" - description: "List of pipeline parameters" - items: - $ref: "#/definitions/apiParameter" - description: "Input parameters to custom pipeline" - apiPipelineDAG: - type: "object" - properties: - tasks: - type: "array" - description: "List of pipeline tasks." - items: - $ref: "#/definitions/apiPipelineTask" - description: "A directed acyclic graph (DAG) describing a complex pipeline" - apiPipelineTask: - type: "object" - required: - - "artifact_id" - - "artifact_type" - properties: - name: - type: "string" - artifact_type: - type: "string" - description: "The type of artifact for this task, can be either one of: 'component',\ - \ 'model', 'notebook', 'pipeline'" - artifact_id: - type: "string" - description: "The UUID of the artifact for this task" - arguments: - $ref: "#/definitions/apiPipelineTaskArguments" - dependencies: - type: "array" - description: "Task dependencies, referring to upstream tasks that have to\ - \ be completed prior to running this task by their respective task names" - items: - type: "string" - description: "A custom pipeline task as part of a directed acyclic graph (DAG)." - apiPipelineTaskArguments: - type: "object" - properties: - parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - description: "Arguments to a custom pipeline task as part of a directed acyclic\ - \ graph (DAG)." - apiRunCodeResponse: - type: "object" - required: - - "run_url" - properties: - run_url: - type: "string" - description: "The URL path to view the run details in the Kubeflow Pipeline\ - \ Web UI" - run_output_location: - type: "string" - description: "The location of the output artifacts produced by the run, if\ - \ any." - example: - run_url: "/runs/details/0e2680ec-5d5a-11e9-9911-5ed556129669" - apiSettings: - type: "object" - required: - - "sections" - properties: - sections: - type: "array" - description: "List of configuration categories." - items: - $ref: "#/definitions/apiSettingsSection" - description: "List of application settings grouped into categories (sections)." - example: - sections: - - settings: - - name: "name" - value: "value" - - name: "name" - value: "value" - name: "name" - description: "description" - - settings: - - name: "name" - value: "value" - - name: "name" - value: "value" - name: "name" - description: "description" - apiSettingsSection: - type: "object" - required: - - "name" - properties: - name: - type: "string" - description: "Display name of the configuration category." - description: - type: "string" - description: "Display text of the configuration category." - settings: - type: "array" - description: "List of settings." - items: - $ref: "#/definitions/apiParameter" - description: "List of application settings grouped into one category (section)." - example: - settings: - - name: "name" - value: "value" - - name: "name" - value: "value" - name: "name" - description: "description" - apiStatus: - type: "object" - properties: - error: - type: "string" - code: - type: "integer" - format: "int32" - details: - type: "array" - items: - $ref: "#/definitions/protobufAny" - apiUrl: - type: "object" - properties: - pipeline_url: - type: "string" - anyValue: - description: "A non-null value of any type like string, number, boolean, array,\ - \ object, see https://stackoverflow.com/a/43328994/5601796 (swagger-2-0-what-schema-to-accept-any-complex-json-value)" - dictionary: - type: "object" - description: "A dictionary of key-value pairs with values of any type." - example: - some_key: "some value" - another_key: true - some_number: 42 - additionalProperties: - $ref: "#/definitions/anyValue" - protobufAny: - type: "object" - properties: - type_url: - type: "string" - description: "TODO" - value: - type: "string" - format: "byte" - description: "Must be a valid serialized protocol buffer of the above specified\ - \ type." - pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" - x-regex: "^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$" - x-modifiers: [] - description: "TODO" - apiModelFramework_runtimes: - type: "object" - properties: - name: - type: "string" - version: - type: "string" diff --git a/api/server/swagger_server/test/__init__.py b/api/server/swagger_server/test/__init__.py deleted file mode 100644 index 798bcf62..00000000 --- a/api/server/swagger_server/test/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -import logging - -import connexion -from flask_testing import TestCase - -from swagger_server.encoder import JSONEncoder - - -class BaseTestCase(TestCase): - - def create_app(self): - logging.getLogger('connexion.operation').setLevel('ERROR') - app = connexion.App(__name__, specification_dir='../swagger/') - app.app.json_encoder = JSONEncoder - app.add_api('swagger.yaml') - return app.app diff --git a/api/server/swagger_server/test/test_application_settings_controller.py b/api/server/swagger_server/test/test_application_settings_controller.py deleted file mode 100644 index 461d0a1e..00000000 --- a/api/server/swagger_server/test/test_application_settings_controller.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import - -from flask import json -from six import BytesIO - -from swagger_server.models.api_settings import ApiSettings # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.models.dictionary import Dictionary # noqa: E501 -from swagger_server.test import BaseTestCase - - -class TestApplicationSettingsController(BaseTestCase): - """ApplicationSettingsController integration test stubs""" - - def test_get_application_settings(self): - """Test case for get_application_settings - - - """ - response = self.client.open( - '/apis/v1alpha1/settings', - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_modify_application_settings(self): - """Test case for modify_application_settings - - - """ - dictionary = Dictionary() - response = self.client.open( - '/apis/v1alpha1/settings', - method='PUT', - data=json.dumps(dictionary), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_set_application_settings(self): - """Test case for set_application_settings - - - """ - settings = ApiSettings() - response = self.client.open( - '/apis/v1alpha1/settings', - method='POST', - data=json.dumps(settings), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - -if __name__ == '__main__': - import unittest - unittest.main() diff --git a/api/server/swagger_server/test/test_catalog_service_controller.py b/api/server/swagger_server/test/test_catalog_service_controller.py deleted file mode 100644 index cc96a989..00000000 --- a/api/server/swagger_server/test/test_catalog_service_controller.py +++ /dev/null @@ -1,53 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import - -from flask import json -from six import BytesIO - -from swagger_server.models.api_catalog_upload import ApiCatalogUpload # noqa: E501 -from swagger_server.models.api_list_catalog_items_response import ApiListCatalogItemsResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.test import BaseTestCase - - -class TestCatalogServiceController(BaseTestCase): - """CatalogServiceController integration test stubs""" - - def test_list_all_assets(self): - """Test case for list_all_assets - - - """ - query_string = [('page_token', 'page_token_example'), - ('page_size', 56), - ('sort_by', 'sort_by_example'), - ('filter', 'filter_example')] - response = self.client.open( - '/apis/v1alpha1/catalog', - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_upload_multiple_assets(self): - """Test case for upload_multiple_assets - - - """ - body = [ApiCatalogUpload()] - response = self.client.open( - '/apis/v1alpha1/catalog', - method='POST', - data=json.dumps(body), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - -if __name__ == '__main__': - import unittest - unittest.main() diff --git a/api/server/swagger_server/test/test_component_service_controller.py b/api/server/swagger_server/test/test_component_service_controller.py deleted file mode 100644 index a80935f3..00000000 --- a/api/server/swagger_server/test/test_component_service_controller.py +++ /dev/null @@ -1,190 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import - -from typing import List - -from flask import json -from six import BytesIO - -from swagger_server.models.api_component import ApiComponent # noqa: E501 -from swagger_server.models.api_generate_code_response import ApiGenerateCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_components_response import ApiListComponentsResponse # noqa: E501 -from swagger_server.models.api_parameter import ApiParameter # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.test import BaseTestCase - - -class TestComponentServiceController(BaseTestCase): - """ComponentServiceController integration test stubs""" - - def test_approve_components_for_publishing(self): - """Test case for approve_components_for_publishing - - - """ - component_ids = [List[str]()] - response = self.client.open( - '/apis/v1alpha1/components/publish_approved', - method='POST', - data=json.dumps(component_ids), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_create_component(self): - """Test case for create_component - - - """ - body = ApiComponent() - response = self.client.open( - '/apis/v1alpha1/components', - method='POST', - data=json.dumps(body), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_delete_component(self): - """Test case for delete_component - - - """ - response = self.client.open( - '/apis/v1alpha1/components/{id}'.format(id='id_example'), - method='DELETE') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_download_component_files(self): - """Test case for download_component_files - - Returns the component artifacts compressed into a .tgz (.tar.gz) file. - """ - query_string = [('include_generated_code', False)] - response = self.client.open( - '/apis/v1alpha1/components/{id}/download'.format(id='id_example'), - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_generate_component_code(self): - """Test case for generate_component_code - - - """ - response = self.client.open( - '/apis/v1alpha1/components/{id}/generate_code'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_component(self): - """Test case for get_component - - - """ - response = self.client.open( - '/apis/v1alpha1/components/{id}'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_component_template(self): - """Test case for get_component_template - - - """ - response = self.client.open( - '/apis/v1alpha1/components/{id}/templates'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_list_components(self): - """Test case for list_components - - - """ - query_string = [('page_token', 'page_token_example'), - ('page_size', 56), - ('sort_by', 'name'), - ('filter', '{"name": "test"}')] - response = self.client.open( - '/apis/v1alpha1/components', - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_run_component(self): - """Test case for run_component - - - """ - parameters = [ApiParameter()] - query_string = [('run_name', 'run_name_example')] - response = self.client.open( - '/apis/v1alpha1/components/{id}/run'.format(id='id_example'), - method='POST', - data=json.dumps(parameters), - content_type='application/json', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_set_featured_components(self): - """Test case for set_featured_components - - - """ - component_ids = [List[str]()] - response = self.client.open( - '/apis/v1alpha1/components/featured', - method='POST', - data=json.dumps(component_ids), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_upload_component(self): - """Test case for upload_component - - - """ - query_string = [('name', 'name_example')] - data = dict(uploadfile=(BytesIO(b'some file data'), 'file.txt')) - response = self.client.open( - '/apis/v1alpha1/components/upload', - method='POST', - data=data, - content_type='multipart/form-data', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_upload_component_file(self): - """Test case for upload_component_file - - - """ - data = dict(uploadfile=(BytesIO(b'some file data'), 'file.txt')) - response = self.client.open( - '/apis/v1alpha1/components/{id}/upload'.format(id='id_example'), - method='POST', - data=data, - content_type='multipart/form-data') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - -if __name__ == '__main__': - import unittest - unittest.main() diff --git a/api/server/swagger_server/test/test_credential_service_controller.py b/api/server/swagger_server/test/test_credential_service_controller.py deleted file mode 100644 index 9c910a34..00000000 --- a/api/server/swagger_server/test/test_credential_service_controller.py +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import - -from flask import json -from six import BytesIO - -from swagger_server.models.api_component import ApiComponent # noqa: E501 -from swagger_server.models.api_credential import ApiCredential # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.test import BaseTestCase - - -class TestCredentialServiceController(BaseTestCase): - """CredentialServiceController integration test stubs""" - - def test_create_credentials(self): - """Test case for create_credentials - - - """ - body = ApiCredential() - response = self.client.open( - '/apis/v1alpha1/credentials', - method='POST', - data=json.dumps(body), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_delete_credential(self): - """Test case for delete_credential - - - """ - response = self.client.open( - '/apis/v1alpha1/credentials/{id}'.format(id='id_example'), - method='DELETE') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_credential(self): - """Test case for get_credential - - - """ - response = self.client.open( - '/apis/v1alpha1/credentials/{id}'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - -if __name__ == '__main__': - import unittest - unittest.main() diff --git a/api/server/swagger_server/test/test_dataset_service_controller.py b/api/server/swagger_server/test/test_dataset_service_controller.py deleted file mode 100644 index cb8a9780..00000000 --- a/api/server/swagger_server/test/test_dataset_service_controller.py +++ /dev/null @@ -1,170 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import - -from flask import json -from six import BytesIO - -from swagger_server.models.api_dataset import ApiDataset # noqa: E501 -from swagger_server.models.api_generate_code_response import ApiGenerateCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_datasets_response import ApiListDatasetsResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.test import BaseTestCase - - -class TestDatasetServiceController(BaseTestCase): - """DatasetServiceController integration test stubs""" - - def test_approve_datasets_for_publishing(self): - """Test case for approve_datasets_for_publishing - - - """ - dataset_ids = [list[str]()] - response = self.client.open( - '/apis/v1alpha1/datasets/publish_approved', - method='POST', - data=json.dumps(dataset_ids), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_create_dataset(self): - """Test case for create_dataset - - - """ - body = ApiDataset() - response = self.client.open( - '/apis/v1alpha1/datasets', - method='POST', - data=json.dumps(body), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_delete_dataset(self): - """Test case for delete_dataset - - - """ - response = self.client.open( - '/apis/v1alpha1/datasets/{id}'.format(id='id_example'), - method='DELETE') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_download_dataset_files(self): - """Test case for download_dataset_files - - Returns the dataset artifacts compressed into a .tgz (.tar.gz) file. - """ - query_string = [('include_generated_code', False)] - response = self.client.open( - '/apis/v1alpha1/datasets/{id}/download'.format(id='id_example'), - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_generate_dataset_code(self): - """Test case for generate_dataset_code - - - """ - response = self.client.open( - '/apis/v1alpha1/datasets/{id}/generate_code'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_dataset(self): - """Test case for get_dataset - - - """ - response = self.client.open( - '/apis/v1alpha1/datasets/{id}'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_dataset_template(self): - """Test case for get_dataset_template - - - """ - response = self.client.open( - '/apis/v1alpha1/datasets/{id}/templates'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_list_datasets(self): - """Test case for list_datasets - - - """ - query_string = [('page_token', 'page_token_example'), - ('page_size', 56), - ('sort_by', 'name'), - ('filter', '{"name": "test"}')] - response = self.client.open( - '/apis/v1alpha1/datasets', - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_set_featured_datasets(self): - """Test case for set_featured_datasets - - - """ - dataset_ids = [list[str]()] - response = self.client.open( - '/apis/v1alpha1/datasets/featured', - method='POST', - data=json.dumps(dataset_ids), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_upload_dataset(self): - """Test case for upload_dataset - - - """ - query_string = [('name', 'name_example')] - data = dict(uploadfile=(BytesIO(b'some file data'), 'file.txt')) - response = self.client.open( - '/apis/v1alpha1/datasets/upload', - method='POST', - data=data, - content_type='multipart/form-data', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_upload_dataset_file(self): - """Test case for upload_dataset_file - - - """ - data = dict(uploadfile=(BytesIO(b'some file data'), 'file.txt')) - response = self.client.open( - '/apis/v1alpha1/datasets/{id}/upload'.format(id='id_example'), - method='POST', - data=data, - content_type='multipart/form-data') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - -if __name__ == '__main__': - import unittest - unittest.main() diff --git a/api/server/swagger_server/test/test_health_check_controller.py b/api/server/swagger_server/test/test_health_check_controller.py deleted file mode 100644 index b566e7fa..00000000 --- a/api/server/swagger_server/test/test_health_check_controller.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import - -from flask import json -from six import BytesIO - -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.test import BaseTestCase - - -class TestHealthCheckController(BaseTestCase): - """HealthCheckController integration test stubs""" - - def test_health_check(self): - """Test case for health_check - - Checks if the server is running - """ - query_string = [('check_database', True), - ('check_object_store', True)] - response = self.client.open( - '/apis/v1alpha1/health_check', - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - -if __name__ == '__main__': - import unittest - unittest.main() diff --git a/api/server/swagger_server/test/test_inference_service_controller.py b/api/server/swagger_server/test/test_inference_service_controller.py deleted file mode 100644 index db3f5194..00000000 --- a/api/server/swagger_server/test/test_inference_service_controller.py +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import - -from flask import json -from six import BytesIO - -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.test import BaseTestCase - - -class TestInferenceServiceController(BaseTestCase): - """InferenceServiceController integration test stubs""" - - def test_get_service(self): - """Test case for get_service - - - """ - response = self.client.open( - '/apis/v1alpha1/inferenceservices/{id}'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_list_services(self): - """Test case for list_services - - Gets all KFServing services - """ - query_string = [('namespace', 'namespace_example'), - ('label', 'label_example'), - ('sort_by', 'name'), - ('filter', '{"name": "test"}')] - response = self.client.open( - '/apis/v1alpha1/inferenceservices', - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - -if __name__ == '__main__': - import unittest - unittest.main() diff --git a/api/server/swagger_server/test/test_model_service_controller.py b/api/server/swagger_server/test/test_model_service_controller.py deleted file mode 100644 index 056eab49..00000000 --- a/api/server/swagger_server/test/test_model_service_controller.py +++ /dev/null @@ -1,188 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import - -from typing import List - -from flask import json -from six import BytesIO - -from swagger_server.models.api_generate_model_code_response import ApiGenerateModelCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_models_response import ApiListModelsResponse # noqa: E501 -from swagger_server.models.api_model import ApiModel # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.test import BaseTestCase - - -class TestModelServiceController(BaseTestCase): - """ModelServiceController integration test stubs""" - - def test_approve_models_for_publishing(self): - """Test case for approve_models_for_publishing - - - """ - model_ids = [List[str]()] - response = self.client.open( - '/apis/v1alpha1/models/publish_approved', - method='POST', - data=json.dumps(model_ids), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_create_model(self): - """Test case for create_model - - - """ - body = ApiModel() - response = self.client.open( - '/apis/v1alpha1/models', - method='POST', - data=json.dumps(body), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_delete_model(self): - """Test case for delete_model - - - """ - response = self.client.open( - '/apis/v1alpha1/models/{id}'.format(id='id_example'), - method='DELETE') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_download_model_files(self): - """Test case for download_model_files - - Returns the model artifacts compressed into a .tgz (.tar.gz) file. - """ - query_string = [('include_generated_code', False)] - response = self.client.open( - '/apis/v1alpha1/models/{id}/download'.format(id='id_example'), - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_generate_model_code(self): - """Test case for generate_model_code - - - """ - response = self.client.open( - '/apis/v1alpha1/models/{id}/generate_code'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_model(self): - """Test case for get_model - - - """ - response = self.client.open( - '/apis/v1alpha1/models/{id}'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_model_template(self): - """Test case for get_model_template - - - """ - response = self.client.open( - '/apis/v1alpha1/models/{id}/templates'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_list_models(self): - """Test case for list_models - - - """ - query_string = [('page_token', 'page_token_example'), - ('page_size', 56), - ('sort_by', 'name'), - ('filter', '{"name": "test"}')] - response = self.client.open( - '/apis/v1alpha1/models', - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_run_model(self): - """Test case for run_model - - - """ - query_string = [('pipeline_stage', 'pipeline_stage_example'), - ('execution_platform', 'execution_platform_example'), - ('run_name', 'run_name_example')] - response = self.client.open( - '/apis/v1alpha1/models/{id}/run'.format(id='id_example'), - method='POST', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_set_featured_models(self): - """Test case for set_featured_models - - - """ - model_ids = [List[str]()] - response = self.client.open( - '/apis/v1alpha1/models/featured', - method='POST', - data=json.dumps(model_ids), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_upload_model(self): - """Test case for upload_model - - - """ - query_string = [('name', 'name_example')] - data = dict(uploadfile=(BytesIO(b'some file data'), 'file.txt')) - response = self.client.open( - '/apis/v1alpha1/models/upload', - method='POST', - data=data, - content_type='multipart/form-data', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_upload_model_file(self): - """Test case for upload_model_file - - - """ - data = dict(uploadfile=(BytesIO(b'some file data'), 'file.txt')) - response = self.client.open( - '/apis/v1alpha1/models/{id}/upload'.format(id='id_example'), - method='POST', - data=data, - content_type='multipart/form-data') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - -if __name__ == '__main__': - import unittest - unittest.main() diff --git a/api/server/swagger_server/test/test_notebook_service_controller.py b/api/server/swagger_server/test/test_notebook_service_controller.py deleted file mode 100644 index acb7e76b..00000000 --- a/api/server/swagger_server/test/test_notebook_service_controller.py +++ /dev/null @@ -1,186 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import - -from typing import List - -from flask import json -from six import BytesIO - -from swagger_server.models.api_generate_code_response import ApiGenerateCodeResponse # noqa: E501 -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_notebooks_response import ApiListNotebooksResponse # noqa: E501 -from swagger_server.models.api_notebook import ApiNotebook # noqa: E501 -from swagger_server.models.api_run_code_response import ApiRunCodeResponse # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.test import BaseTestCase - - -class TestNotebookServiceController(BaseTestCase): - """NotebookServiceController integration test stubs""" - - def test_approve_notebooks_for_publishing(self): - """Test case for approve_notebooks_for_publishing - - - """ - notebook_ids = [List[str]()] - response = self.client.open( - '/apis/v1alpha1/notebooks/publish_approved', - method='POST', - data=json.dumps(notebook_ids), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_create_notebook(self): - """Test case for create_notebook - - - """ - body = ApiNotebook() - response = self.client.open( - '/apis/v1alpha1/notebooks', - method='POST', - data=json.dumps(body), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_delete_notebook(self): - """Test case for delete_notebook - - - """ - response = self.client.open( - '/apis/v1alpha1/notebooks/{id}'.format(id='id_example'), - method='DELETE') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_download_notebook_files(self): - """Test case for download_notebook_files - - Returns the notebook artifacts compressed into a .tgz (.tar.gz) file. - """ - query_string = [('include_generated_code', False)] - response = self.client.open( - '/apis/v1alpha1/notebooks/{id}/download'.format(id='id_example'), - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_generate_notebook_code(self): - """Test case for generate_notebook_code - - - """ - response = self.client.open( - '/apis/v1alpha1/notebooks/{id}/generate_code'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_notebook(self): - """Test case for get_notebook - - - """ - response = self.client.open( - '/apis/v1alpha1/notebooks/{id}'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_notebook_template(self): - """Test case for get_notebook_template - - - """ - response = self.client.open( - '/apis/v1alpha1/notebooks/{id}/templates'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_list_notebooks(self): - """Test case for list_notebooks - - - """ - query_string = [('page_token', 'page_token_example'), - ('page_size', 56), - ('sort_by', 'name'), - ('filter', '{"name": "test"}')] - response = self.client.open( - '/apis/v1alpha1/notebooks', - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_run_notebook(self): - """Test case for run_notebook - - - """ - query_string = [('run_name', 'run_name_example')] - response = self.client.open( - '/apis/v1alpha1/notebooks/{id}/run'.format(id='id_example'), - method='POST', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_set_featured_notebooks(self): - """Test case for set_featured_notebooks - - - """ - notebook_ids = [List[str]()] - response = self.client.open( - '/apis/v1alpha1/notebooks/featured', - method='POST', - data=json.dumps(notebook_ids), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_upload_notebook(self): - """Test case for upload_notebook - - - """ - query_string = [('name', 'name_example')] - data = dict(uploadfile=(BytesIO(b'some file data'), 'file.txt')) - response = self.client.open( - '/apis/v1alpha1/notebooks/upload', - method='POST', - data=data, - content_type='multipart/form-data', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_upload_notebook_file(self): - """Test case for upload_notebook_file - - - """ - data = dict(uploadfile=(BytesIO(b'some file data'), 'file.txt')) - response = self.client.open( - '/apis/v1alpha1/notebooks/{id}/upload'.format(id='id_example'), - method='POST', - data=data, - content_type='multipart/form-data') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - -if __name__ == '__main__': - import unittest - unittest.main() diff --git a/api/server/swagger_server/test/test_pipeline_service_controller.py b/api/server/swagger_server/test/test_pipeline_service_controller.py deleted file mode 100644 index 17cf5c58..00000000 --- a/api/server/swagger_server/test/test_pipeline_service_controller.py +++ /dev/null @@ -1,147 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -# coding: utf-8 - -from __future__ import absolute_import - -from typing import List - -from flask import json -from six import BytesIO - -from swagger_server.models.api_get_template_response import ApiGetTemplateResponse # noqa: E501 -from swagger_server.models.api_list_pipelines_response import ApiListPipelinesResponse # noqa: E501 -from swagger_server.models.api_pipeline import ApiPipeline # noqa: E501 -from swagger_server.models.api_pipeline_extended import ApiPipelineExtended # noqa: E501 -from swagger_server.models.api_status import ApiStatus # noqa: E501 -from swagger_server.test import BaseTestCase - - -class TestPipelineServiceController(BaseTestCase): - """PipelineServiceController integration test stubs""" - - def test_approve_pipelines_for_publishing(self): - """Test case for approve_pipelines_for_publishing - - - """ - pipeline_ids = [List[str]()] - response = self.client.open( - '/apis/v1alpha1/pipelines/publish_approved', - method='POST', - data=json.dumps(pipeline_ids), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_create_pipeline(self): - """Test case for create_pipeline - - - """ - body = ApiPipeline() - response = self.client.open( - '/apis/v1alpha1/pipelines', - method='POST', - data=json.dumps(body), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_delete_pipeline(self): - """Test case for delete_pipeline - - - """ - response = self.client.open( - '/apis/v1alpha1/pipelines/{id}'.format(id='id_example'), - method='DELETE') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_download_pipeline_files(self): - """Test case for download_pipeline_files - - Returns the pipeline YAML compressed into a .tgz (.tar.gz) file. - """ - response = self.client.open( - '/apis/v1alpha1/pipelines/{id}/download'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_pipeline(self): - """Test case for get_pipeline - - - """ - response = self.client.open( - '/apis/v1alpha1/pipelines/{id}'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_get_template(self): - """Test case for get_template - - - """ - response = self.client.open( - '/apis/v1alpha1/pipelines/{id}/templates'.format(id='id_example'), - method='GET') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_list_pipelines(self): - """Test case for list_pipelines - - - """ - query_string = [('page_token', 'page_token_example'), - ('page_size', 56), - ('sort_by', 'name'), - ('filter', '{"name": "test"}')] - response = self.client.open( - '/apis/v1alpha1/pipelines', - method='GET', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_set_featured_pipelines(self): - """Test case for set_featured_pipelines - - - """ - pipeline_ids = [List[str]()] - response = self.client.open( - '/apis/v1alpha1/pipelines/featured', - method='POST', - data=json.dumps(pipeline_ids), - content_type='application/json') - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - def test_upload_pipeline(self): - """Test case for upload_pipeline - - - """ - query_string = [('name', 'name_example'), - ('description', 'description_example')] - data = dict(uploadfile=(BytesIO(b'some file data'), 'file.txt'), - annotations='annotations_example') - response = self.client.open( - '/apis/v1alpha1/pipelines/upload', - method='POST', - data=data, - content_type='multipart/form-data', - query_string=query_string) - self.assert200(response, - 'Response body is : ' + response.data.decode('utf-8')) - - -if __name__ == '__main__': - import unittest - unittest.main() diff --git a/api/server/swagger_server/util.py b/api/server/swagger_server/util.py deleted file mode 100644 index 00fca329..00000000 --- a/api/server/swagger_server/util.py +++ /dev/null @@ -1,301 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -import datetime -import logging - -import six -import typing - -from flask import request -from swagger_server.__main__ import get_request_log_msg - - -def _deserialize(data, klass): - """Deserializes dict, list, str into an object. - - :param data: dict, list or str. - :param klass: class literal, or string of class name. - - :return: object. - """ - if data is None: - return None - - if klass in six.integer_types or klass in (float, str, bool): - return _deserialize_primitive(data, klass) - elif klass == object: - return _deserialize_object(data) - elif klass == datetime.date: - return deserialize_date(data) - elif klass == datetime.datetime: - if isinstance(data, datetime.datetime): - return data - else: - return deserialize_datetime(data) - # AttributeError: module 'typing' has no attribute 'GenericMeta': https://github.com/zalando/connexion/issues/739#issuecomment-437398835 - # elif type(klass) == typing.GenericMeta: - elif type(klass) == typing._GenericAlias: # Python >= 3.7 - if klass._name == 'List': - return _deserialize_list(data, klass.__args__[0]) - if klass._name == 'Dict': - return _deserialize_dict(data, klass.__args__[1]) - elif hasattr(klass, '__origin__') and hasattr(klass, '__extra__'): # Python <= 3.6 - if klass.__extra__ == list: - return _deserialize_list(data, klass.__args__[0]) - if klass.__extra__ == dict: - return _deserialize_dict(data, klass.__args__[1]) - else: - return deserialize_model(data, klass) - - -def _deserialize_primitive(data, klass): - """Deserializes to primitive type. - - :param data: data to deserialize. - :param klass: class literal. - - :return: int, long, float, str, bool. - :rtype: int | long | float | str | bool - """ - try: - value = klass(data) - except UnicodeEncodeError: - value = six.u(data) - except TypeError: - value = data - return value - - -def _deserialize_object(value): - """Return a original value. - - :return: object. - """ - return value - - -def deserialize_date(string): - """Deserializes string to date. - - :param string: str. - :type string: str - :return: date. - :rtype: date - """ - try: - from dateutil.parser import parse - return parse(string).date() - except ImportError: - return string - - -def deserialize_datetime(string): - """Deserializes string to datetime. - - The string should be in iso8601 datetime format. - - :param string: str. - :type string: str - :return: datetime. - :rtype: datetime - """ - try: - from dateutil.parser import parse - return parse(string) - except ImportError: - return string - - -def deserialize_model(data, klass): - """Deserializes list or dict to model. - - :param data: dict, list. - :type data: dict | list - :param klass: class literal. - :return: model object. - """ - instance = klass() - - if not instance.swagger_types: - return data - - for attr, attr_type in six.iteritems(instance.swagger_types): - if data is not None \ - and instance.attribute_map[attr] in data \ - and isinstance(data, (list, dict)): - value = data[instance.attribute_map[attr]] - setattr(instance, attr, _deserialize(value, attr_type)) - - return instance - - -def _deserialize_list(data, boxed_type): - """Deserializes a list and its elements. - - :param data: list to deserialize. - :type data: list - :param boxed_type: class literal. - - :return: deserialized list. - :rtype: list - """ - return [_deserialize(sub_data, boxed_type) - for sub_data in data] - - -def _deserialize_dict(data, boxed_type): - """Deserializes a dict and its elements. - - :param data: dict to deserialize. - :type data: dict - :param boxed_type: class literal. - - :return: deserialized dict. - :rtype: dict - """ - return {k: _deserialize(v, boxed_type) - for k, v in six.iteritems(data)} - - -####################################################################### -# non-generated methods # -####################################################################### - -class ApiError(Exception): - - def __init__(self, message, http_status_code=500): - self.message = message - self.http_status_code = http_status_code - super(ApiError, self).__init__(message) - - def __str__(self): - return f"{self.message} ({self.http_status_code})" - - def __repr__(self): - return self.__str__() - - -# cache results of GET requests, POST/PUT/PATCH/DELETE request will invalidate -response_cache = dict() - - -def should_cache(controller_name, method_name): - return request.method == "GET" \ - and method_name != "health_check" \ - and "inference_service" not in controller_name - - -def invoke_controller_impl(controller_name=None, parameters=None, method_name=None): - """ - Invoke the controller implementation of the method called on the parent frame. - - Example in :class:`swagger_server.controllers.component_service_controller` :: - - def delete_component(id): - return util.invoke_controller_impl(__name__, locals()) - - :param controller_name: fully qualified name of the controller, will be - determined via inspection of the caller frame if not specified - - :param parameters: dictionary of parameters, will be - determined via inspection of the caller frame if not specified - - :param method_name: name of the method to call on the controller implementation, will be - determined via inspection of the caller frame if not specified - - :return: result of the controller method execution - """ - import importlib - import traceback - import inspect - - # if not controller_name or not parameters or not method_name: - if None in (controller_name, parameters, method_name): - current_frame = inspect.currentframe() - caller_frame = inspect.getouterframes(current_frame)[1][0] - caller_module = inspect.getmodule(caller_frame) - - if not controller_name: - controller_name = caller_module.__name__ - - if not method_name: - method_name = inspect.getframeinfo(caller_frame).function - - if not parameters: - # caller_func_obj = getattr(caller_module, method_name) - # parameters = dict(inspect.signature(caller_func_obj).parameters) - # parameters = inspect.getfullargspec(caller_func_obj).args - parameters = caller_frame.f_locals - - # replace 'None' values with None, happens when client sets a parameter to None (a JSON serialization quirk) - for k, v in parameters.items(): - if type(v) == str and v == 'None': - parameters[k] = None - - # remove parameters with None values, otherwise the default values of method signature will not take effect - for k, v in dict(parameters).items(): - if v is None: - del parameters[k] - - module_name_parts = controller_name.split('.') - - if module_name_parts[1] == 'controllers': - module_name_parts[1] = 'controllers_impl' - module_name_parts[2] = module_name_parts[2] + '_impl' - - module_name = '.'.join(module_name_parts) - - try: - controller_impl_module = importlib.import_module(module_name) - impl_func = getattr(controller_impl_module, method_name) - - except ModuleNotFoundError as e: - traceback.print_exc() - return e.msg, 500 - - except AttributeError: - traceback.print_exc() - return f"The method '{method_name}' does not exist in module '{module_name}'", 501 - - if impl_func: - try: - results = None - request_cache_key = (controller_name, method_name, str(parameters)) - - if should_cache(controller_name, method_name): - results = response_cache.get(request_cache_key) - - if not results: - results = impl_func(**parameters) - - if should_cache(controller_name, method_name): - response_cache[request_cache_key] = results - log_msg = get_request_log_msg() - logging.getLogger("GETcache").info(f"{log_msg} added to cache") - - if request.method in ("DELETE", "POST", "PATCH", "PUT") and not method_name.startswith("run_"): - # any modifying method clears all cached entries, to avoid loopholes like delete '*', - # upload has no 'id', catalog modifies other asset types (represented by controller class), ... - response_cache.clear() - logging.getLogger("cache").info("Cleared response cache") - - return results - - except ApiError as e: - print(traceback.format_exc()) - return e.message, e.http_status_code - - except AssertionError as e: - print(traceback.format_exc()) - return str(e), 422 - - # TODO: this is for debugging during development, but we may not want to return details - # on just any error in production, revise this! - except Exception as e: - print(traceback.format_exc()) - return f"{e.__class__.__name__}: {str(e)}", 500 - - else: - return f'Method not found: {module_name}.{method_name}()', 501 diff --git a/api/server/test-requirements.txt b/api/server/test-requirements.txt deleted file mode 100644 index 7f8d96e6..00000000 --- a/api/server/test-requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -flask_testing==0.6.1 -coverage>=4.0.3 -nose>=1.3.7 -pluggy>=0.3.1 -py>=1.4.31 -randomize>=0.13 diff --git a/api/server/tox.ini b/api/server/tox.ini deleted file mode 100644 index 3e0b644e..00000000 --- a/api/server/tox.ini +++ /dev/null @@ -1,10 +0,0 @@ -[tox] -envlist = py35 - -[testenv] -deps=-r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -commands= - nosetests \ - [] \ No newline at end of file diff --git a/api/swagger/swagger.yaml b/api/swagger/swagger.yaml deleted file mode 100644 index bc8ea11f..00000000 --- a/api/swagger/swagger.yaml +++ /dev/null @@ -1,2955 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 - -swagger: "2.0" - -info: - version: "0.1.30-upload-catalog-from-url" - title: "MLX API" - description: "MLX API Extension for Kubeflow Pipelines" - -schemes: -- "http" -#- "https" -# -#security: -#- Bearer: [] -# -#securityDefinitions: -# Bearer: -# type: "apiKey" -# name: "authorization" -# in: "header" - -basePath: "/apis/v1alpha1" - -paths: - /health_check: - get: - tags: - - "HealthCheck" - operationId: "health_check" - summary: "Checks if the server is running" - security: [] # No security - parameters: - - name: "check_database" - description: "Test connection to MySQL database" - in: "query" - required: false - type: "boolean" - allowEmptyValue: true - - name: "check_object_store" - description: "Test connection to Minio object store" - in: "query" - required: false - type: "boolean" - allowEmptyValue: true - responses: - 200: - description: "Server is healthy" - default: - description: "Something is wrong" - schema: - $ref: "#/definitions/apiStatus" - - /settings: - get: - tags: - - "ApplicationSettings" - operationId: "get_application_settings" - description: "Returns the application settings." - produces: - - "application/json" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiSettings" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - post: - tags: - - "ApplicationSettings" - operationId: "set_application_settings" - description: "Set and store the application settings." - consumes: - - "application/json" - produces: - - "application/json" - parameters: - - in: "body" - name: "settings" - required: true - schema: - $ref: "#/definitions/apiSettings" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiSettings" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - put: - tags: - - "ApplicationSettings" - operationId: "modify_application_settings" - description: "Modify one or more of the application settings." - consumes: - - "application/json" - produces: - - "application/json" - parameters: - - in: "body" - name: "dictionary" - description: "A dictionary where the name of the keys corresponds to the name of the settings." - required: true - schema: - $ref: "#/definitions/dictionary" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiSettings" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - - /catalog: - get: - tags: - - "CatalogService" - operationId: "list_all_assets" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for." - required: false - type: "string" - x-nullable: true - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiListCatalogItemsResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - post: - tags: - - "CatalogService" - operationId: "upload_multiple_assets" - parameters: - - name: "body" - in: "body" - required: true - schema: - $ref: "#/definitions/apiCatalogUpload" - responses: - 201: - description: "All objects were created successfully." - schema: - $ref: "#/definitions/apiCatalogUploadResponse" - 207: - description: "Some objects were created successfully, some errors occurred." - schema: - $ref: "#/definitions/apiCatalogUploadResponse" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - - /catalog/upload_from_url: - post: - tags: - - "CatalogService" - operationId: "upload_catalog_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - description: "URL pointing to the catalog YAML file." - in: "formData" - required: true - type: "string" - - name: "access_token" - description: "Optional, the Bearer token to access the 'url'." - in: "formData" - required: false - type: "string" - responses: - 201: - description: "All objects were created successfully." - schema: - $ref: "#/definitions/apiCatalogUploadResponse" - 207: - description: "Some objects were created successfully, some errors occurred." - schema: - $ref: "#/definitions/apiCatalogUploadResponse" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - - /components: - get: - tags: - - "ComponentService" - operationId: "list_components" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that correspond to the ApiComponent's attribute names and their respective values to be filtered for." - required: false - type: "string" - x-nullable: true - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiListComponentsResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - post: - tags: - - "ComponentService" - operationId: "create_component" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiComponent" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiComponent" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /components/{id}: - get: - tags: - - "ComponentService" - operationId: "get_component" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiComponent" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - delete: - tags: - - "ComponentService" - operationId: "delete_component" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 204: - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /components/{id}/download: - get: - summary: "Returns the component artifacts compressed into a .tgz (.tar.gz) file." - tags: - - "ComponentService" - operationId: "download_component_files" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "include_generated_code" - description: "Include generated run script in download" - in: "query" - type: "boolean" - required: false - default: false - allowEmptyValue: true - produces: - - "application/gzip" - responses: - 200: - description: "A TGZ file containing the component artifacts." - schema: - type: "file" - - /components/{id}/generate_code: - get: - tags: - - "ComponentService" - operationId: "generate_component_code" - description: "Generate sample code to use component in a pipeline" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiGenerateCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /components/{id}/run: - post: - tags: - - "ComponentService" - operationId: "run_component" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "parameters" - in: "body" - schema: - type: "array" - items: - $ref: "#/definitions/apiParameter" - required: true - - name: "run_name" - description: "name to identify the run on the Kubeflow Pipelines UI, defaults to component name" - in: "query" - required: false - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /components/{id}/templates: - get: - tags: - - "ComponentService" - operationId: "get_component_template" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiGetTemplateResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /components/upload: - post: - tags: - - "ComponentService" - operationId: "upload_component" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The component YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB." - required: true - type: "file" - - name: "name" - in: "query" - required: false - type: "string" - responses: - 201: - description: "Component was created successfully" - schema: - $ref: "#/definitions/apiComponent" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /components/upload_from_url: - post: - tags: - - "ComponentService" - operationId: "upload_component_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - description: "URL pointing to the component YAML file." - in: "formData" - required: true - type: "string" - - name: "name" - description: "Optional, the name of the component to be created overriding the name in the YAML file." - in: "query" - required: false - type: "string" - - name: "access_token" - description: "Optional, the Bearer token to access the 'url'." - in: "formData" - required: false - type: "string" - responses: - 201: - description: "Component was created successfully." - schema: - $ref: "#/definitions/apiComponent" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - - /components/{id}/upload: - post: - tags: - - "ComponentService" - operationId: "upload_component_file" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "id" - in: "path" - description: "The id of the component." - required: true - type: "string" - - name: "uploadfile" - in: "formData" - description: "The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md)" - required: true - type: "file" - responses: - 204: - description: "" - schema: - $ref: "#/definitions/apiComponent" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /components/featured: - post: - tags: - - "ComponentService" - operationId: "set_featured_components" - parameters: - - name: "component_ids" - description: "Array of component IDs to be featured." - in: "body" - required: true - schema: - type: "array" - items: - type: "string" - responses: - 200: - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /components/publish_approved: - post: - tags: - - "ComponentService" - operationId: "approve_components_for_publishing" - parameters: - - name: "component_ids" - description: "Array of component IDs to be approved for publishing." - in: "body" - required: true - schema: - type: "array" - items: - type: "string" - responses: - 200: - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /credentials: - get: - tags: - - "CredentialService" - operationId: "list_credentials" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that correspond to the Credential's attribute names and their respective values to be filtered for." - required: false - type: "string" - x-nullable: true - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiListCredentialsResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - post: - tags: - - "CredentialService" - operationId: "create_credential" - consumes: - - "application/json" - description: "Creates a credential associated with a pipeline." - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiCredential" - responses: - 201: - description: "The credential was created." - schema: - $ref: "#/definitions/apiCredential" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /credentials/{id}: - get: - tags: - - "CredentialService" - operationId: "get_credential" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiCredential" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - delete: - tags: - - "CredentialService" - operationId: "delete_credential" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 204: - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /datasets: - get: - tags: - - "DatasetService" - operationId: "list_datasets" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of 'field_name', 'field_name asc' or 'field_name desc'. Ascending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary containing key-value pairs with name of the object property to apply filter on and the value of the respective property." - required: false - type: "string" - x-nullable: true - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiListDatasetsResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - post: - tags: - - "DatasetService" - operationId: "create_dataset" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiDataset" - responses: - 201: - description: "A successful response." - schema: - $ref: "#/definitions/apiDataset" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /datasets/{id}: - get: - tags: - - "DatasetService" - operationId: "get_dataset" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiDataset" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - delete: - tags: - - "DatasetService" - operationId: "delete_dataset" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 204: - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /datasets/{id}/download: - get: - summary: "Returns the dataset artifacts compressed into a .tgz (.tar.gz) file." - tags: - - "DatasetService" - operationId: "download_dataset_files" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "include_generated_code" - description: "Include generated run script in download" - in: "query" - type: "boolean" - required: false - default: false - allowEmptyValue: true - produces: - - "application/gzip" - responses: - 200: - description: "A TGZ file containing the dataset artifacts." - schema: - type: "file" - - /datasets/{id}/generate_code: - get: - tags: - - "DatasetService" - operationId: "generate_dataset_code" - description: "Generate sample code to use dataset in a pipeline" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiGenerateCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /datasets/{id}/run: - post: - tags: - - "DatasetService" - operationId: "run_dataset" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "parameters" - in: "body" - schema: - type: "array" - items: - $ref: "#/definitions/apiParameter" - required: false - - name: "run_name" - description: "name to identify the run on the Kubeflow Pipelines UI, defaults to component name" - in: "query" - required: false - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /datasets/{id}/templates: - get: - tags: - - "DatasetService" - operationId: "get_dataset_template" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiGetTemplateResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /datasets/upload: - post: - tags: - - "DatasetService" - operationId: "upload_dataset" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The dataset YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB." - required: true - type: "file" - - name: "name" - in: "query" - required: false - type: "string" - responses: - 201: - description: "" - schema: - $ref: "#/definitions/apiDataset" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /datasets/upload_from_url: - post: - tags: - - "DatasetService" - operationId: "upload_dataset_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - description: "URL pointing to the dataset YAML file." - in: "formData" - required: true - type: "string" - - name: "name" - description: "Optional, the name of the dataset to be created overriding the name in the YAML file." - in: "query" - required: false - type: "string" - - name: "access_token" - description: "Optional, the Bearer token to access the 'url'." - in: "formData" - required: false - type: "string" - responses: - 201: - description: "Dataset was created successfully." - schema: - $ref: "#/definitions/apiDataset" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - - /datasets/{id}/upload: - post: - tags: - - "DatasetService" - operationId: "upload_dataset_file" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "id" - in: "path" - description: "The id of the dataset." - required: true - type: "string" - - name: "uploadfile" - in: "formData" - description: "The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md)" - required: true - type: "file" - responses: - 204: - description: "" - schema: - $ref: "#/definitions/apiDataset" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /datasets/featured: - post: - tags: - - "DatasetService" - operationId: "set_featured_datasets" - parameters: - - name: "dataset_ids" - description: "Array of dataset IDs to be featured." - in: "body" - required: true - schema: - type: "array" - items: - type: "string" - responses: - 200: - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /datasets/publish_approved: - post: - tags: - - "DatasetService" - operationId: "approve_datasets_for_publishing" - parameters: - - name: "dataset_ids" - description: "Array of dataset IDs to be approved for publishing." - in: "body" - required: true - schema: - type: "array" - items: - type: "string" - responses: - 200: - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /inferenceservices: - get: - tags: - - "InferenceService" - operationId: "list_inferenceservices" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that correspond to the InferenceService's attribute names and their respective values to be filtered for." - required: false - type: "string" - x-nullable: true - - name: "namespace" - in: "query" - required: false - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiListInferenceservicesResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - post: - tags: - - "InferenceService" - operationId: "create_service" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiInferenceservice" - - name: "namespace" - in: "query" - required: false - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiInferenceservice" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /inferenceservices/{id}: - get: - tags: - - "InferenceService" - operationId: "get_inferenceservices" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "namespace" - in: "query" - required: false - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiInferenceservice" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /inferenceservices/upload: - post: - tags: - - "InferenceService" - operationId: "upload_service" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The inference service metadata to upload. Maximum size of 32MB is supported." - required: true - type: "file" - - name: "name" - in: "query" - required: false - type: "string" - - name: "namespace" - in: "query" - required: false - type: "string" - responses: - 200: - description: "" - schema: - $ref: "#/definitions/apiInferenceservice" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /models: - get: - tags: - - "ModelService" - operationId: "list_models" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that correspond to the Model's attribute names and their respective values to be filtered for." - required: false - type: "string" - x-nullable: true - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiListModelsResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - post: - tags: - - "ModelService" - operationId: "create_model" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiModel" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiModel" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /models/{id}: - get: - tags: - - "ModelService" - operationId: "get_model" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiModel" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - delete: - tags: - - "ModelService" - operationId: "delete_model" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 204: - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /models/{id}/download: - get: - summary: "Returns the model artifacts compressed into a .tgz (.tar.gz) file." - tags: - - "ModelService" - operationId: "download_model_files" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "include_generated_code" - description: "Include generated run scripts in download" - in: "query" - type: "boolean" - required: false - default: false - allowEmptyValue: true - produces: - - "application/gzip" - responses: - 200: - description: "A TGZ file containing the model artifacts." - schema: - type: "file" - - /models/{id}/generate_code: - get: - tags: - - "ModelService" - operationId: "generate_model_code" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiGenerateModelCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /models/{id}/run: - post: - tags: - - "ModelService" - operationId: "run_model" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "pipeline_stage" - description: "pipeline stage, either 'train' or 'serve'" - in: "query" - required: true - type: "string" - enum: ["train", "serve"] - - name: "execution_platform" - description: "execution platform, i.e. 'kubernetes', 'knative'" - in: "query" - required: true - type: "string" - - name: "run_name" - description: "name to identify the run on the Kubeflow Pipelines UI, defaults to model identifier" - in: "query" - required: false - type: "string" - - name: "parameters" - description: "optional run parameters, must include 'github_url' and 'github_token' if credentials are required" - in: "body" - required: false - schema: - $ref: "#/definitions/dictionary" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /models/{id}/templates: - get: - tags: - - "ModelService" - operationId: "get_model_template" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiGetTemplateResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /models/upload: - post: - tags: - - "ModelService" - operationId: "upload_model" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The model YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB." - required: true - type: "file" - - name: "name" - in: "query" - required: false - type: "string" - responses: - 201: - description: "" - schema: - $ref: "#/definitions/apiModel" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /models/upload_from_url: - post: - tags: - - "ModelService" - operationId: "upload_model_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - description: "URL pointing to the model YAML file." - in: "formData" - required: true - type: "string" - - name: "name" - description: "Optional, the name of the model to be created overriding the name in the YAML file." - in: "query" - required: false - type: "string" - - name: "access_token" - description: "Optional, the Bearer token to access the 'url'." - in: "formData" - required: false - type: "string" - responses: - 201: - description: "Model was created successfully." - schema: - $ref: "#/definitions/apiModel" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - - /models/{id}/upload: - post: - tags: - - "ModelService" - operationId: "upload_model_file" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "id" - in: "path" - description: "The model identifier." - required: true - type: "string" - - name: "uploadfile" - in: "formData" - description: "The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md)" - required: true - type: "file" - responses: - 204: - description: "" - schema: - $ref: "#/definitions/apiModel" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /models/featured: - post: - tags: - - "ModelService" - operationId: "set_featured_models" - parameters: - - name: "model_ids" - description: "Array of model IDs to be featured." - in: "body" - required: true - schema: - type: "array" - items: - type: "string" - responses: - 200: - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /models/publish_approved: - post: - tags: - - "ModelService" - operationId: "approve_models_for_publishing" - parameters: - - name: "model_ids" - description: "Array of model IDs to be approved for publishing." - in: "body" - required: true - schema: - type: "array" - items: - type: "string" - responses: - 200: - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /notebooks: - get: - tags: - - "NotebookService" - operationId: "list_notebooks" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - x-nullable: true - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that correspond to the Notebook's attribute names and their respective values to be filtered for." - required: false - type: "string" - x-nullable: true - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiListNotebooksResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - post: - tags: - - "NotebookService" - operationId: "create_notebook" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiNotebook" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiNotebook" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /notebooks/{id}: - get: - tags: - - "NotebookService" - operationId: "get_notebook" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiNotebook" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - delete: - tags: - - "NotebookService" - operationId: "delete_notebook" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 204: - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /notebooks/{id}/download: - get: - summary: "Returns the notebook artifacts compressed into a .tgz (.tar.gz) file." - tags: - - "NotebookService" - operationId: "download_notebook_files" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "include_generated_code" - description: "Include generated run script in download" - in: "query" - type: "boolean" - required: false - default: false - allowEmptyValue: true - produces: - - "application/gzip" - responses: - 200: - description: "A TGZ file containing the notebook artifacts." - schema: - type: "file" - - /notebooks/{id}/generate_code: - get: - tags: - - "NotebookService" - operationId: "generate_notebook_code" - description: "Generate sample code to use notebook in a pipeline" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiGenerateCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /notebooks/{id}/run: - post: - tags: - - "NotebookService" - operationId: "run_notebook" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "run_name" - description: "name to identify the run on the Kubeflow Pipelines UI, defaults to notebook name" - in: "query" - required: false - type: "string" - - name: "parameters" - description: "optional run parameters, may be required based on pipeline definition" - in: "body" - required: false - schema: - $ref: "#/definitions/dictionary" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /notebooks/{id}/templates: - get: - tags: - - "NotebookService" - operationId: "get_notebook_template" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiGetTemplateResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /notebooks/upload: - post: - tags: - - "NotebookService" - operationId: "upload_notebook" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The notebook metadata YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB." - required: true - type: "file" - - name: "name" - in: "query" - required: false - type: "string" - - name: "enterprise_github_token" - in: "formData" - description: "Optional GitHub API token providing read-access to notebooks stored on Enterprise GitHub accounts." - required: false - type: "string" - responses: - 201: - description: "" - schema: - $ref: "#/definitions/apiNotebook" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /notebooks/upload_from_url: - post: - tags: - - "NotebookService" - operationId: "upload_notebook_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - description: "URL pointing to the notebook YAML file." - in: "formData" - required: true - type: "string" - - name: "name" - description: "Optional, the name of the notebook to be created overriding the name in the YAML file." - in: "query" - required: false - type: "string" - - name: "access_token" - description: "Optional, the Bearer token to access the 'url'." - in: "formData" - required: false - type: "string" - responses: - 201: - description: "Notebook was created successfully." - schema: - $ref: "#/definitions/apiNotebook" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - - /notebooks/{id}/upload: - post: - tags: - - "NotebookService" - operationId: "upload_notebook_file" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "id" - in: "path" - description: "The id of the notebook." - required: true - type: "string" - - name: "uploadfile" - in: "formData" - description: "The file to upload, overwriting existing. Can be a GZip-compressed TAR file (.tgz), a YAML file (.yaml), Python script (.py), or Markdown file (.md)" - required: true - type: "file" - responses: - 204: - description: "" - schema: - $ref: "#/definitions/apiNotebook" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /notebooks/featured: - post: - tags: - - "NotebookService" - operationId: "set_featured_notebooks" - parameters: - - name: "notebook_ids" - description: "Array of notebook IDs to be featured." - in: "body" - required: true - schema: - type: "array" - items: - type: "string" - responses: - 200: - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /notebooks/publish_approved: - post: - tags: - - "NotebookService" - operationId: "approve_notebooks_for_publishing" - parameters: - - name: "notebook_ids" - description: "Array of notebook IDs to be approved for publishing." - in: "body" - required: true - schema: - type: "array" - items: - type: "string" - responses: - 200: - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /pipelines: - get: - tags: - - "PipelineService" - operationId: "list_pipelines" - parameters: - - name: "page_token" - in: "query" - required: false - type: "string" - - name: "page_size" - in: "query" - required: false - type: "integer" - format: "int32" - - name: "sort_by" - in: "query" - description: "Can be format of \"field_name\", \"field_name asc\" or \"field_name\ - \ desc\"\nAscending by default." - required: false - type: "string" - - name: "filter" - in: "query" - description: "A string-serialized JSON dictionary with key-value pairs that correspond to the Pipeline's attribute names and their respective values to be filtered for." - required: false - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiListPipelinesResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - post: - tags: - - "PipelineService" - operationId: "create_pipeline" - parameters: - - in: "body" - name: "body" - required: true - schema: - $ref: "#/definitions/apiPipeline" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiPipeline" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /pipelines/{id}: - get: - tags: - - "PipelineService" - operationId: "get_pipeline" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiPipelineExtended" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - delete: - tags: - - "PipelineService" - operationId: "delete_pipeline" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 204: - description: "Deletion successful." - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /pipelines/{id}/download: - get: - summary: "Returns the pipeline YAML compressed into a .tgz (.tar.gz) file." - tags: - - "PipelineService" - operationId: "download_pipeline_files" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - produces: - - "application/gzip" - responses: - 200: - description: "A TGZ file containing the component artifacts." - schema: - type: "file" - - /pipelines/{id}/run: - post: - tags: - - "PipelineService" - operationId: "run_pipeline" - consumes: - - "application/json" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - - name: "run_name" - description: "name to identify the run on the Kubeflow Pipelines UI, defaults to pipeline name" - in: "query" - required: false - type: "string" - - name: "parameters" - description: "optional run parameters, may be required based on pipeline definition" - in: "body" - required: false - schema: - $ref: "#/definitions/dictionary" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /pipelines/{id}/templates: - get: - tags: - - "PipelineService" - operationId: "get_template" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiGetTemplateResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /pipelines/upload: - post: - tags: - - "PipelineService" - operationId: "upload_pipeline" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "uploadfile" - in: "formData" - description: "The pipeline YAML file to upload. Can be a GZip-compressed TAR file (.tgz, .tar.gz) or a YAML file (.yaml, .yml). Maximum size is 32MB." - required: true - type: "file" - - name: "name" - in: "query" - description: "A name for this pipeline, optional" - required: false - type: "string" - - name: "description" - in: "query" - description: "A description for this pipeline, optional" - required: false - type: "string" -# - name: "labels" -# in: "formData" -# description: "A string representation of a JSON dictionary of labels describing this pipeline, optional." -# required: false -# type: "string" -# # should be type:"object" for a dictionary, but not allowed in Swagger 2.0 -# # see https://stackoverflow.com/questions/32725052/in-swagger-how-to-define-an-api-that-consumes-a-file-along-with-a-schema-paramer - - name: "annotations" - in: "formData" - description: "A string representation of a JSON dictionary of annotations describing this pipeline, optional. \ - Example: \ - {\"platform\": \"Kubeflow\", \"license\": \"Opensource\"}" - required: false - type: "string" - # should be type:"object" for a dictionary, but not allowed in Swagger 2.0 - # see https://stackoverflow.com/questions/32725052/in-swagger-how-to-define-an-api-that-consumes-a-file-along-with-a-schema-paramer - responses: - 201: - description: "" - schema: - $ref: "#/definitions/apiPipelineExtended" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - - /pipelines/upload_from_url: - post: - tags: - - "PipelineService" - operationId: "upload_pipeline_from_url" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "url" - description: "URL pointing to the pipeline YAML file." - in: "formData" - required: true - type: "string" - - name: "name" - description: "Optional, the name of the pipeline to be created overriding the name in the YAML file." - in: "query" - required: false - type: "string" - - name: "access_token" - description: "Optional, the Bearer token to access the 'url'." - in: "formData" - required: false - type: "string" - responses: - 201: - description: "Pipeline was created successfully." - schema: - $ref: "#/definitions/apiPipeline" - default: - description: "Something went wrong." - schema: - $ref: "#/definitions/apiStatus" - - /pipelines/featured: - post: - tags: - - "PipelineService" - operationId: "set_featured_pipelines" - parameters: - - name: "pipeline_ids" - description: "Array of pipeline IDs to be featured." - in: "body" - required: true - schema: - type: "array" - items: - type: "string" - responses: - 200: - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /pipelines/publish_approved: - post: - tags: - - "PipelineService" - operationId: "approve_pipelines_for_publishing" - parameters: - - name: "pipeline_ids" - description: "Array of pipeline IDs to be approved for publishing." - in: "body" - required: true - schema: - type: "array" - items: - type: "string" - responses: - 200: - description: "Success" - default: - description: "Something went wrong" - schema: - $ref: "#/definitions/apiStatus" - - /pipelines/run_custom_pipeline: - post: - tags: - - "PipelineService" - operationId: "run_custom_pipeline" - consumes: - - "application/json" - description: "Run a complex pipeline defined by a directed acyclic graph (DAG)" - parameters: - - name: "run_custom_pipeline_payload" - description: "A custom pipeline defined by a directed acyclic graph (DAG) and input parameters" - in: "body" - required: true - schema: - $ref: "#/definitions/apiPipelineCustomRunPayload" - - name: "run_name" - description: "Name to identify the run on the Kubeflow Pipelines UI" - in: "query" - required: false - type: "string" - responses: - 200: - description: "A successful response." - schema: - $ref: "#/definitions/apiRunCodeResponse" - default: - description: "" - schema: - $ref: "#/definitions/apiStatus" - -############################################################################### -# definitions -############################################################################### - -definitions: - - apiAccessToken: - type: "object" - properties: - api_token: - type: "string" - description: "A read-only API access token." - url_host: - type: "string" - description: "The API server host that this API token applies to." - required: - - api_token - - url_host - example: - api_token: "T0K3N123" - url_host: "github.ibm.com" - - apiAsset: - type: "object" - description: "Abstract asset with properties shared across all MLX asset types (except pipelines)." - properties: - id: - type: "string" - created_at: - type: "string" - format: "date-time" - name: - type: "string" - description: - type: "string" - featured: - type: "boolean" - publish_approved: - type: "boolean" - related_assets: - type: "array" - items: - type: "string" - filter_categories: - type: "object" - additionalProperties: - type: "string" - required: - - name - - description - example: - id: "05au-84nr-1tey-0qwr" - created_at: "2019-01-23T04:56:07.000+00:00" - name: "Image Recognition Model" - description: "A machine learning model to identify objects in images" - filter_categories: - domain: image-recognition - platform: - - kubernetes - - kfserving - language: python - - apiCatalogUpload: - type: "object" - properties: - api_access_tokens: - description: "A mapping of read-only API access tokens to a partial URL." - type: "array" - items: - $ref: "#/definitions/apiAccessToken" - components: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadItem" - datasets: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadItem" - models: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadItem" - notebooks: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadItem" - pipelines: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadItem" - - apiCatalogUploadItem: - type: "object" - properties: - name: - type: "string" - url: - type: "string" - description: "The URL to the YAML metadata file, i.e. on GitHub.com" - required: - - url - example: - name: "My awesome new asset" - url: "https://github.com/org/repo/blob/main/assets/my/awesome/new/asset.yaml" - - apiCatalogUploadResponse: - description: "A list of assets and/or errors created in response to a catalog upload." - allOf: - - $ref: "#/definitions/apiListCatalogItemsResponse" - - $ref: "#/definitions/apiListCatalogUploadErrors" - - properties: - total_created: - type: "integer" - format: "int32" - - apiListCatalogUploadErrors: - type: "object" - properties: - errors: - type: "array" - items: - $ref: "#/definitions/apiCatalogUploadError" - total_errors: - type: "integer" - format: "int32" - - apiCatalogUploadError: - description: "A catalog upload error" - allOf: - - $ref: "#/definitions/apiCatalogUploadItem" - - properties: - error_message: - type: "string" - status_code: - type: "integer" - format: "int32" - - apiComponent: - description: "A Kubeflow Pipeline component." - allOf: - - $ref: "#/definitions/apiAsset" - - properties: - metadata: - $ref: "#/definitions/apiMetadata" - parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - example: - id: "id" - created_at: "2019-01-23T04:56:07.000+00:00" - name: "Deep Learning - Train Model" - description: "description" - metadata: - labels: - platform: "IBM Watson" - parameters: - - name: "model_filename" - value: "model.py" - - name: "data_filename" - value: "data.csv" - - # POST /credentials { - # project_id: "xxx", - # pipeline_id: "yyy", - # api_key: "zzz", - # data_assets: ["guid1", "guid2"] - # } - apiCredential: - description: "A credentials object associated with a pipeline" - type: "object" - properties: - id: - type: "string" - created_at: - type: "string" - format: "date-time" - pipeline_id: - type: "string" - project_id: - type: "string" - api_key: - description: "TODO: what is the api_key" - type: "string" - data_assets: - description: "List of data asset IDs" - type: "array" - items: - type: "string" -# additional_data: -# $ref: "#/definitions/dictionary" - required: - - pipeline_id - - project_id - example: - pipeline_id: "eac1j24-0f2ndl-0a3pi3df" - project_id: "my-awesome-project-1214" - api_key: "api_key" - data_assets: - - "data_assets" - - "data_assets" - created_at: "2000-01-23T04:56:07.000+00:00" - id: "generated-guid-used-as-k8s-secret-name" - - apiDataset: - allOf: - - $ref: "#/definitions/apiAsset" - - properties: - domain: - type: "string" # should be typed, enumeration - format: - type: "string" # should be typed, enumeration - size: - type: "string" - number_of_records: - type: "integer" - format: "int32" - license: - type: "string" # should be typed, enumeration - metadata: - $ref: "#/definitions/apiMetadata" - example: - id: "id" - created_at: "2020-09-15T04:56:07.000+00:00" - name: "Fashion-MNIST" - description: "Standardized images of fashion items from 10 classes" - format: "CSV" - size: "37MB" - number_of_records: 60000 - license: "MIT" - domain: "Image Classification" - - apiGenerateCodeResponse: - type: "object" - properties: - script: - type: "string" - description: "The script source code to run the component in a pipeline" - example: - script: "TODO: Python source file content example" - - apiGenerateModelCodeResponse: - type: "object" - properties: - scripts: - type: "array" - items: - $ref: "#/definitions/apiModelScript" - description: "The source code samples to use the model in a pipeline" - - apiGetTemplateResponse: - type: "object" - properties: - template: - type: "string" - description: "The YAML template file content" - url: - type: "string" - description: "The URL to download the template text from S3 storage (Minio)" - example: - template: "TODO: YAML file content" - url: "http://min.io:9000/mlpipeline/components/1lBnSAce8lAXP97Yb11eqSk/train_wml.yaml" - - apiListCatalogItemsResponse: - type: "object" - properties: - components: - type: "array" - items: - $ref: "#/definitions/apiComponent" - datasets: - type: "array" - items: - $ref: "#/definitions/apiDataset" - models: - type: "array" - items: - $ref: "#/definitions/apiModel" - notebooks: - type: "array" - items: - $ref: "#/definitions/apiNotebook" - pipelines: - type: "array" - items: - $ref: "#/definitions/apiPipeline" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - - apiListComponentsResponse: - type: "object" - properties: - components: - type: "array" - items: - $ref: "#/definitions/apiComponent" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - components: - - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - parameters: - - name: "name" - value: "value" - - name: "name" - value: "value" - - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - parameters: - - name: "name" - value: "value" - - name: "name" - value: "value" - next_page_token: "next_page_token" - total_size: 10 - - apiListCredentialsResponse: - type: "object" - properties: - credentials: - type: "array" - items: - $ref: "#/definitions/apiCredential" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - - apiListDatasetsResponse: - type: "object" - properties: - datasets: - type: "array" - items: - $ref: "#/definitions/apiDataset" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - datasets: - - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - next_page_token: "next_page_token" - total_size: 2 - - apiListModelsResponse: - type: "object" - properties: - models: - type: "array" - items: - $ref: "#/definitions/apiModel" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - - apiListInferenceservicesResponse: - type: "object" - properties: - Inferenceservices: - type: "array" - items: - $ref: "#/definitions/apiInferenceservice" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - - apiListNotebooksResponse: - type: "object" - properties: - notebooks: - type: "array" - items: - $ref: "#/definitions/apiNotebook" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - - apiListPipelinesResponse: - type: "object" - properties: - pipelines: - type: "array" - items: - $ref: "#/definitions/apiPipelineExtended" - total_size: - type: "integer" - format: "int32" - next_page_token: - type: "string" - example: - pipelines: - - name: "name" - created_at: "2018-12-29T04:56:07.000+00:00" - description: "description" - id: "e3U42y3-au240nc-13nc" - status: "READY" - parameters: - - name: "name" - value: "value" - - name: "name" - value: "value" - - name: "another pipeline" - created_at: "2019-06-23T14:18:01.000+00:00" - description: "another pipeline" - id: "v92-834nat-2ndida" - annotations: - platform: "KFP" - next_page_token: "next_page_token" - total_size: 10 - - apiMetadata: - type: "object" - properties: - annotations: - type: "object" - additionalProperties: - type: "string" - labels: - type: "object" - additionalProperties: - type: "string" - tags: - type: "array" - items: - type: "string" - example: - annotations: "{platform: 'IBM Watson'}" - tags: "['keras', 'tensorflow']" - - apiInferenceservice: - type: "object" - properties: - apiVersion: - type: "string" - kind: - type: "string" - metadata: - $ref: "#/definitions/anyValue" - spec: - $ref: "#/definitions/anyValue" - required: - - apiVersion - - kind - example: - apiVersion: "serving.kubeflow.org/v1alpha2" - kind: "InferenceService" - metadata: - name: "sklearn-iris" - spec: - default: - predictor: - sklearn: - storageUri: "gs://kfserving-samples/models/sklearn/iris" - - apiModel: - description: "A model that can be trained and/or served." - allOf: - - $ref: "#/definitions/apiAsset" - - type: object - properties: - domain: - type: "string" - labels: - type: "object" - additionalProperties: - type: "string" - framework: - $ref: "#/definitions/apiModelFramework" - trainable: - type: "boolean" - trainable_tested_platforms: - type: "array" - items: - type: "string" - trainable_credentials_required: - type: "boolean" - trainable_parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - servable: - type: "boolean" - servable_tested_platforms: - type: "array" - items: - type: "string" - servable_credentials_required: - type: "boolean" - servable_parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - required: - - framework - example: - id: "max-audio-classifier" - created_at: "2019-04-23T04:56:07.000+00:00" - name: "Max Audio Classifier" - description: "Identify sounds in short audio clips" - labels: - domain: "speech recognition" - framework: - name: "tensorflow" - version: "1.8" - runtimes: - name: "python" - version: "3.5" - trainable: false - servable: true - - apiModelFramework: - type: "object" - properties: - name: - type: "string" - version: - type: "string" - runtimes: - type: "object" - properties: - name: - type: "string" - version: - type: "string" - required: - - name - example: - name: "tensorflow" - version: "1.5" - runtimes: - name: "python" - version: "3.5" - - apiModelScript: - type: "object" - properties: - pipeline_stage: - type: "string" - description: "pipeline stage that this code sample applies to, either 'train' or 'serve'" - execution_platform: - type: "string" - description: "execution platform that this code sample applies to, i.e. 'kubernetes', 'knative'" - script_code: - type: "string" - description: "the source code to run the model in a pipeline stage" - required: - - pipeline_stage - - execution_platform - - script_code - example: - pipeline_stage: "serve" - execution_platform: "kubernetes" - script_code: "TODO: python script example" - - apiNotebook: - description: "A notebook component." - allOf: - - $ref: "#/definitions/apiAsset" - - properties: - url: - type: "string" - description: "The URL to the notebook source file (.ipynb) on GitHub.com" - metadata: - $ref: "#/definitions/apiMetadata" - parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - required: - - url - example: - id: "92jh4-2nf09-soaqm5" - created_at: "2019-07-15T14:56:07.000+00:00" - name: "My Notebook" - description: "Some text describing the notebook" - metadata: - annotations: - platform: "OpenSource" - - apiParameter: - type: "object" - properties: - name: - type: "string" - description: - type: "string" - default: - $ref: "#/definitions/anyValue" - value: - $ref: "#/definitions/anyValue" - required: - - name - example: - name: "name" - value: "value" - - apiPipeline: - type: "object" - properties: - id: - type: "string" - created_at: - type: "string" - format: "date-time" - name: - type: "string" - description: - type: "string" - parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" -# url: -# $ref: "#/definitions/apiUrl" - status: - type: "string" - description: "In case any error happens retrieving a pipeline field, only\ - \ pipeline ID\nand the error message is returned. Client has the flexibility\ - \ of choosing\nhow to handle error. This is especially useful during listing\ - \ call." - default_version_id: - type: "string" - description: "The default version of the pipeline. As of now, the latest\ - \ version is used as default. (In the future, if desired by customers, we\ - \ can allow them to set default version.)" - readOnly: true - namespace: - type: "string" - example: - name: "name" - created_at: "2000-01-23T04:56:07.000+00:00" - description: "description" - id: "id" - status: "READY" - parameters: - - name: "name" - value: "value" - - name: "name" - value: "value" -# url: -# pipeline_url: "pipeline_url" - - apiPipelineExtension: - type: "object" - properties: - id: - type: "string" - annotations: - type: "object" - additionalProperties: - type: "string" - featured: - type: "boolean" - publish_approved: - type: "boolean" - example: - id: "id" - annotations: - platform: "KFP" - - apiPipelineExtended: - description: "A representation of a pipeline with extended properties." - allOf: - - $ref: "#/definitions/apiPipeline" - - $ref: "#/definitions/apiPipelineExtension" - - apiPipelineCustomRunPayload: - description: "Wrapper object to post a custom pipeline run defined by a directed acyclic graph (DAG) and input parameters." - type: "object" - properties: - custom_pipeline: - $ref: "#/definitions/apiPipelineCustom" - run_parameters: - $ref: "#/definitions/dictionary" - - apiPipelineCustom: - description: "A custom pipeline defined by a directed acyclic graph (DAG) and input parameters." - type: "object" - properties: - dag: - $ref: "#/definitions/apiPipelineDAG" - inputs: - $ref: "#/definitions/apiPipelineInputs" - name: - description: "Name of the custom pipeline" - type: "string" - description: - description: "Optional description of the custom pipeline" - type: "string" - required: - - dag - - name - - apiPipelineInputs: - description: "Input parameters to custom pipeline" - type: "object" - properties: - parameters: - description: "List of pipeline parameters" - type: "array" - items: - $ref: "#/definitions/apiParameter" - - apiPipelineDAG: - description: "A directed acyclic graph (DAG) describing a complex pipeline" - type: "object" - properties: - tasks: - description: "List of pipeline tasks." - type: "array" - items: - $ref: "#/definitions/apiPipelineTask" - - apiPipelineTask: - description: "A custom pipeline task as part of a directed acyclic graph (DAG)." - type: "object" - properties: - name: - type: "string" - artifact_type: - description: "The type of artifact for this task, can be either one of: 'component', 'model', 'notebook', 'pipeline'" - type: "string" - artifact_id: - description: "The UUID of the artifact for this task" - type: "string" - arguments: - $ref: "#/definitions/apiPipelineTaskArguments" - dependencies: - description: "Task dependencies, referring to upstream tasks that have to be completed prior to running this task by their respective task names" - type: "array" - items: - type: "string" - required: - - artifact_type - - artifact_id - - apiPipelineTaskArguments: - description: "Arguments to a custom pipeline task as part of a directed acyclic graph (DAG)." - type: "object" - properties: - parameters: - type: "array" - items: - $ref: "#/definitions/apiParameter" - - apiRunCodeResponse: - type: "object" - properties: - run_url: - type: "string" - description: "The URL path to view the run details in the Kubeflow Pipeline Web UI" - run_output_location: - type: "string" - description: "The location of the output artifacts produced by the run, if any." - required: - - run_url - example: - run_url: "/runs/details/0e2680ec-5d5a-11e9-9911-5ed556129669" - - apiSettings: - type: "object" - description: "List of application settings grouped into categories (sections)." - properties: - sections: - description: "List of configuration categories." - type: "array" - items: - $ref: "#/definitions/apiSettingsSection" - required: - - sections - - apiSettingsSection: - type: "object" - description: "List of application settings grouped into one category (section)." - properties: - name: - type: "string" - description: "Display name of the configuration category." - description: - type: "string" - description: "Display text of the configuration category." - settings: - description: "List of settings." - type: "array" - items: - $ref: "#/definitions/apiParameter" - required: - - name - - apiStatus: - type: "object" - properties: - error: - type: "string" - code: - type: "integer" - format: "int32" - details: - type: "array" - items: - $ref: "#/definitions/protobufAny" - - apiUrl: - type: "object" - properties: - pipeline_url: - type: "string" - - anyValue: - description: "A non-null value of any type like string, number, boolean, array, object,\ - \ see https://stackoverflow.com/a/43328994/5601796 (swagger-2-0-what-schema-to-accept-any-complex-json-value)" - - dictionary: - description: "A dictionary of key-value pairs with values of any type." - type: "object" - additionalProperties: - $ref: "#/definitions/anyValue" - example: - some_key: "some value" - another_key: true - some_number: 42 - - protobufAny: - type: "object" - properties: - type_url: - type: "string" - description: "TODO" - value: - type: "string" - format: "byte" - description: "Must be a valid serialized protocol buffer of the above specified type." - pattern: "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" - x-regex: "^(?:[A-Za-z0-9+\\/]{4})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$" - x-modifiers: [] - description: "TODO" diff --git a/bootstrapper/Dockerfile b/bootstrapper/Dockerfile deleted file mode 100644 index 4d27b5f9..00000000 --- a/bootstrapper/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM python:3.7-slim - -RUN apt-get update && apt-get install -y git - -RUN pip install requests ruamel.yaml https://storage.googleapis.com/ml-pipeline/release/0.1.21/kfp.tar.gz ai_pipeline_params - -ENV APP_HOME /app -COPY . $APP_HOME -WORKDIR $APP_HOME - -ENTRYPOINT ["python"] -CMD ["start.py"] diff --git a/bootstrapper/README.md b/bootstrapper/README.md deleted file mode 100644 index ddd4c034..00000000 --- a/bootstrapper/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# How to use it -1. Install MLX -2. Get the [github.ibm.com personal access token](https://github.ibm.com/settings/tokens/new) and give it access to read all public repos. -3. Fillin the below environment variables in [bootstrap.yaml](bootstrap.yaml): - - **enterprise_github_token**: github.ibm.com personal access token from step 2. -4. Deploy boostrapper: - ```shell - kubectl apply -f bootstrapper/bootstrap.yaml -n kubeflow - kubectl apply -f bootstrapper/configmap.yaml -n kubeflow - ``` - - After 2-5 minutes, the assets in [configmap.yaml](configmap.yaml) should be populated. diff --git a/bootstrapper/bootstrap.yaml b/bootstrapper/bootstrap.yaml deleted file mode 100644 index c8a4bc46..00000000 --- a/bootstrapper/bootstrap.yaml +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -apiVersion: batch/v1 -kind: Job -metadata: - name: bootstrap - namespace: kubeflow -spec: - backoffLimit: 5 - template: - spec: - containers: - - name: mlx-bootstrap - image: aipipeline/bootstrap:latest - imagePullPolicy: Always - env: - - name: internal_github_raw_url - value: https://raw.githubusercontent.com/machine-learning-exchange/mlx/main/ - - name: enterprise_github_token - value: '' - - name: mlx_api - value: mlx-api - - name: cleanup - value: 'false' - volumeMounts: - - name: mlx-config - mountPath: /etc/config.json - subPath: config.json - restartPolicy: Never - volumes: - - name: mlx-config - configMap: - name: mlx-config diff --git a/bootstrapper/catalog_upload.json b/bootstrapper/catalog_upload.json deleted file mode 100644 index 7a5dc91f..00000000 --- a/bootstrapper/catalog_upload.json +++ /dev/null @@ -1,196 +0,0 @@ -{ - "components": [ - { - "name": "Create Secret - Kubernetes Cluster", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/create-secret/component.yaml" - }, - { - "name": "Generate Dataset Metadata", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/dax-to-dlf/component.yaml" - }, - { - "name": "Create Dataset Volume", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/dlf/component.yaml" - }, - { - "name": "Echo Sample", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/echo/component.yaml" - }, - { - "name": "Kubernetes Model Deploy", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/kube-model-deployment/component.yaml" - }, - { - "name": "Create Model Config", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/model-config/component.yaml" - }, - { - "name": "Model Fairness Check", - "url": "https://raw.githubusercontent.com/Trusted-AI/AIF360/master/mlops/kubeflow/bias_detector_pytorch/component.yaml" - }, - { - "name": "Adversarial Robustness Evaluation", - "url": "https://raw.githubusercontent.com/Trusted-AI/adversarial-robustness-toolbox/main/utils/mlops/kubeflow/robustness_evaluation_fgsm_pytorch/component.yaml" - } - ], - "datasets": [ - { - "name": "Project CodeNet", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/codenet/codenet.yaml" - }, - { - "name": "Project CodeNet - Language Classifier", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/codenet_langclass/codenet_langclass.yaml" - }, - { - "name": "Project CodeNet - MLM", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/codenet_mlm/codenet_mlm.yaml" - }, - { - "name": "Finance Proposition Bank", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/fpb/fpb.yaml" - }, - { - "name": "Groningen Meaning Bank", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/gmb/gmb.yaml" - }, - { - "name": "NOAA Weather Data", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/jfk/jfk.yaml" - }, - { - "name": "PubLayNet", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/publaynet/publaynet.yaml" - }, - { - "name": "PubTabNet", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/pubtabnet/pubtabnet.yaml" - }, - { - "name": "Thematic Clustering", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/thematic_clustering/thematic_clustering.yaml" - }, - { - "name": "TensorFlow Speech Commands", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/tsc/tsc.yaml" - } - ], - "models": [ - { - "name": "CodeNet Language Classification", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/codenet-language-classification/codenet-language-classification.yaml" - }, - { - "name": "Human Pose Estimator", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-human-pose-estimator/max-human-pose-estimator.yaml" - }, - { - "name": "Image Caption Generator", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-image-caption-generator/max-image-caption-generator.yaml" - }, - { - "name": "Image Resolution Enhancer", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-image-resolution-enhancer/max-image-resolution-enhancer.yaml" - }, - { - "name": "Named Entity Tagger", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-named-entity-tagger/max-named-entity-tagger.yaml" - }, - { - "name": "Object Detector", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-object-detector/max-object-detector.yaml" - }, - { - "name": "Optical Character Recognition", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-ocr/max-ocr.yaml" - }, - { - "name": "Question Answering", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-question-answering/max-question-answering.yaml" - }, - { - "name": "Recommender System", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-recommender/max-recommender.yaml" - }, - { - "name": "Text Sentiment Classifier", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-text-sentiment-classifier/max-text-sentiment-classifier.yaml" - }, - { - "name": "Toxic Comment Classifier", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-toxic-comment-classifier/max-toxic-comment-classifier.yaml" - }, - { - "name": "Weather Forecaster", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-weather-forecaster/max-weather-forecaster.yaml" - } - ], - "notebooks": [ - { - "name": "JFK Airport Analysis", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/JFK-airport.yaml" - }, - { - "name": "AIF360 Bias detection example", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/aif-bias.yaml" - }, - { - "name": "ART detector model", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/art-detector.yaml" - }, - { - "name": "ART poisoning attack", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/art-poison.yaml" - }, - { - "name": "Project CodeNet - Language Classification", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/codenet-lang.yaml" - }, - { - "name": "Project CodeNet - MLM", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/codenet-mlm.yaml" - }, - { - "name": "Qiskit Quantum Kernel Machine Learning", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/qiskit-ml.yaml" - }, - { - "name": "Qiskit Neural Network Classifier and Regressor", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/qiskit-nncr.yaml" - } - ], - "pipelines": [ - { - "name": "Parallel Join", - "url": "https://github.com/kubeflow/kfp-tekton/blob/master/sdk/python/tests/compiler/testdata/parallel_join.yaml" - }, - { - "name": "Sequential Pipeline", - "url": "https://github.com/kubeflow/kfp-tekton/blob/master/sdk/python/tests/compiler/testdata/sequential.yaml" - }, - { - "name": "ResourceOp Basic", - "url": "https://github.com/kubeflow/kfp-tekton/blob/master/sdk/python/tests/compiler/testdata/resourceop_basic.yaml" - }, - { - "name": "Calculation Pipeline", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/pipeline-samples/calculation-pipeline.yaml" - }, - { - "name": "Katib Early Stopping Experiment", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/pipeline-samples/katib-pipeline.yaml" - }, - { - "name": "Nested Pipeline", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/pipeline-samples/nested-pipeline.yaml" - }, - { - "name": "Trusted AI Pipeline", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/pipeline-samples/trusted-ai-pipeline.yaml" - }, - { - "name": "Watson Machine Learning", - "url": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/pipeline-samples/wml-pipeline.yaml" - } - ] -} diff --git a/bootstrapper/configmap.yaml b/bootstrapper/configmap.yaml deleted file mode 100644 index 2d7bee31..00000000 --- a/bootstrapper/configmap.yaml +++ /dev/null @@ -1,162 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -apiVersion: v1 -kind: ConfigMap -metadata: - name: mlx-config - namespace: kubeflow -data: - config.json: | - { - "pipelines":[ - ], - "components": [ - { - "name": "Train Spark Model - IBM Cloud", - "source": "https://raw.githubusercontent.com/kubeflow/pipelines/master/components/ibm-components/spark/train_spark/component.yaml" - }, - { - "name": "Serve PyTorch Model - Seldon Core", - "source": "https://raw.githubusercontent.com/kubeflow/pipelines/master/components/ibm-components/ffdl/serve/component.yaml" - }, - { - "name": "Deploy Model - Watson Machine Learning", - "source": "https://raw.githubusercontent.com/kubeflow/pipelines/master/components/ibm-components/watson/deploy/component.yaml" - }, - { - "name": "Train Model - Fabric for Deep Learning", - "source": "https://raw.githubusercontent.com/kubeflow/pipelines/master/components/ibm-components/ffdl/train/component.yaml" - }, - { - "name": "Model Robustness Check - PyTorch", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/metrics/robustness_checker/component.yaml" - }, - { - "name": "Model Fairness Check - PyTorch", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/metrics/bias_detector/component.yaml" - }, - { - "name": "Deploy Model - Kubernetes", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/kubernetes/kube_deployment/component.yaml" - }, - { - "name": "Deploy Model - Knative", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/knative/knative_container_deployment/component.yaml" - }, - { - "name": "Subscribe - Watson OpenScale", - "source": "https://raw.githubusercontent.com/kubeflow/pipelines/master/components/ibm-components/watson/manage/subscribe/component.yaml" - }, - { - "name": "Store model - Watson Machine Learning", - "source": "https://raw.githubusercontent.com/kubeflow/pipelines/master/components/ibm-components/watson/store/component.yaml" - }, - { - "name": "Jupyter", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/component-samples/jupyter/component.yaml" - } - ], - "models": [ - { - "name": "MAX Audio Classifier", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-audio-classifier.yaml" - }, - { - "name": "MAX Breast Cancer Mitosis Detector", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-breast-cancer-mitosis-detector.yaml" - }, - { - "name": "MAX Facial Age Estimator", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-facial-age-estimator.yaml" - }, - { - "name": "MAX Image Caption Generator", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-image-caption-generator.yaml" - }, - { - "name": "Image Completer", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/image-completer.yaml" - }, - { - "name": "MAX Image Segmenter", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-image-segmenter.yaml" - }, - { - "name": "MAX News Text Generator", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-news-text-generator.yaml" - }, - { - "name": "MAX Object Detector", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-object-detector.yaml" - }, - { - "name": "MAX Sports Video Classifier", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-sports-video-classifier.yaml" - }, - { - "name": "MAX Weather Forecaster", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/model-samples/max-weather-forecaster.yaml" - } - ], - "notebooks": [ - { - "name": "AIF360 Gender Classification", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/aif360-gender.yaml" - }, - { - "name": "ART detector model", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/art-detector.yaml" - }, - { - "name": "ART poisoning attack", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/art-poison.yaml" - }, - { - "name": "AIF360 Bias detection example", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/aif-bias.yaml" - }, - { - "name": "Watson OpenScale", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/watson-openscale.yaml" - }, - { - "name": "Watson OpenScale Walkthrough", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/OpenScale.yaml" - }, - { - "name": "Train and deploy with Watson Machine Learning", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/notebook-samples/watson-ml.yaml" - } - ], - "datasets": [ - { - "name": "Thematic Clustering", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/thematic_clustering.yaml" - }, - { - "name": "Finance Proposition Bank", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/fpb.yaml" - }, - { - "name": "Groningen Meaning Bank", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/gmb.yaml" - }, - { - "name": "NOAA Weather Data", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/jfk.yaml" - }, - { - "name": "PubLayNet", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/publaynet.yaml" - }, - { - "name": "PubTabNet", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/pubtabnet.yaml" - }, - { - "name": "TensorFlow Speech Commands", - "source": "https://raw.githubusercontent.com/machine-learning-exchange/katalog/main/dataset-samples/tsc.yaml" - } - ] - } diff --git a/bootstrapper/start.py b/bootstrapper/start.py deleted file mode 100644 index 919b14ef..00000000 --- a/bootstrapper/start.py +++ /dev/null @@ -1,171 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -import json -import os -import requests -import subprocess -import tarfile -import shutil - - -internal_github_raw_url = os.getenv("internal_github_raw_url", "https://raw.githubusercontent.com/machine-learning-exchange/mlx/main/") -api_url = os.getenv("mlx_api", "mlx-api") -token = os.getenv("enterprise_github_token", "") -repo_name = 'mlx' -asset_categories = ['pipelines', 'components', 'models', 'notebooks', 'datasets'] - - -def get_github_files(asset_name, asset_list): - os.makedirs(asset_name, exist_ok=True) - for asset in asset_list: - if token: - headers = { - 'Accept': 'application/vnd.github.v3.raw', - 'Authorization': 'token ' + token - } - else: - headers = {} - if '://' not in asset['source'] and token: - r = requests.get(internal_github_raw_url + asset['source'], headers=headers) - elif 'raw.github.ibm.com' in asset['source'] and token: - r = requests.get(asset['source'], headers=headers) - elif '://' in asset['source']: - r = requests.get(asset['source']) - else: - continue - - if asset_name != 'components': - filename = os.path.basename(asset['source']) - else: - filename = asset['name'].replace(" ", "-") + '.yaml' - with open(os.path.join(asset_name, filename), "w") as file: - file.write(r.text) - asset['download'] = 'true' - - -def upload_asset(asset_name, asset_list): - for asset in asset_list: - if asset.get('download', '') == 'true': - if asset_name != 'components': - filename = os.path.basename(asset['source']) - else: - filename = asset['name'].replace(" ", "-") + '.yaml' - tarname = filename.replace(".yaml", ".tgz") - tarfile_path = os.path.join(asset_name, tarname) - with tarfile.open(tarfile_path, "w:gz") as tar: - tar.add(os.path.join(asset_name, filename), arcname=filename) - tar.close() - params = { - 'name': asset.get('name', '') - } - if asset_name == 'notebooks' and '://' not in asset['source'] and token: - data = { - 'enterprise_github_token': token - } - else: - data = {} - with open(os.path.join(asset_name, tarname), 'rb') as f: - r = requests.post("http://" + api_url + '/apis/v1alpha1/' + asset_name + '/upload', params=params, files={'uploadfile': f}, data=data) - print(r.text) - - -def cleanup_assets(asset_name): - r = requests.delete("http://" + api_url + '/apis/v1alpha1/' + asset_name + '/*') - print(r.text) - - -def get_github_dir_files(asset_name, asset_list): - os.makedirs(asset_name, exist_ok=True) - if token: - headers = { - 'Accept': 'application/vnd.github.v3.raw', - 'Authorization': 'token ' + token - } - internal_github_url = internal_github_raw_url.replace('raw.', token + '@').replace('/master/', '') - command = ['git', 'clone', internal_github_url, repo_name] - subprocess.run(command, check=True) - for asset in asset_list: - if '://' not in asset['source'] and token: - shutil.copytree(repo_name + '/' + asset['source'], asset_name + '/' + asset['name'].replace(" ", "-")) - asset['url'] = internal_github_url + '/' + asset['source'] - asset['download'] = 'true' - elif '://' in asset['source']: - source_pieces = asset['source'].split('/') - github_url = '/'.join(source_pieces[0:5]) - github_repo = source_pieces[4] - source_dir = '/'.join(source_pieces[7:]) - command = ['git', 'clone', github_url, github_repo] - if github_repo not in os.listdir('.'): - subprocess.run(command, check=True) - shutil.copytree(github_repo + '/' + source_dir, asset_name + '/' + asset['name'].replace(" ", "-")) - asset['url'] = asset['source'] - asset['download'] = 'true' - - -def upload_dir_asset(asset_name, asset_list): - for asset in asset_list: - if asset.get('download', '') == 'true': - dirname = asset['name'].replace(" ", "-") - tarname = dirname + '.tgz' - tarfile_path = os.path.join(asset_name, tarname) - with tarfile.open(tarfile_path, "w:gz") as tar: - for filename in os.listdir(os.path.join(asset_name, dirname)): - if filename.endswith('.yaml') or filename.endswith('.yml'): - tar.add(os.path.join(asset_name, dirname, filename), arcname=filename) - tar.close() - with open(os.path.join(asset_name, tarname), 'rb') as f: - params = { - 'name': asset.get('name', ''), - 'url': asset.get('url', '') - } - r = requests.post("http://" + api_url + '/apis/v1alpha1/' + asset_name + '/upload', files={'uploadfile': f}, params=params) - print(r.text) - - -def feature_default_assets(): - for category in asset_categories: - data = ['*'] - r = requests.post("http://" + api_url + '/apis/v1alpha1/' + category + '/publish_approved', json=data) - print(r.text) - r = requests.post("http://" + api_url + '/apis/v1alpha1/' + category + '/featured', json=data) - print(r.text) - - -if __name__ == '__main__': - with open("/etc/config.json", "r") as f: - samples = json.load(f) - f.close() - if os.getenv('cleanup', '') == 'true': - for category in asset_categories: - cleanup_assets(category) - - get_github_files('pipelines', samples['pipelines']) - get_github_files('components', samples['components']) - get_github_files('models', samples['models']) - get_github_files('notebooks', samples['notebooks']) - get_github_files('datasets', samples['datasets']) - - if api_url: - for asset in samples['pipelines']: - if asset.get('download', '') == 'true': - filename = os.path.basename(asset['source']) - tarname = filename + '.tar.gz' - command = ['dsl-compile', '--py', os.path.join('pipelines', filename), '--output', os.path.join('pipelines', tarname)] - subprocess.run(command, check=True) - with open(os.path.join('pipelines', tarname), 'rb') as f: - params = { - 'name': asset.get('name', ''), - 'description': asset.get('description', '') - } - data = { - 'annotations': json.dumps(asset.get('annotations', {})) - } - r = requests.post("http://" + api_url + '/apis/v1alpha1/pipelines/upload', files={'uploadfile': f}, params=params, data=data) - print(r.text) - - upload_asset('components', samples['components']) - upload_asset('models', samples['models']) - upload_asset('notebooks', samples['notebooks']) - upload_asset('datasets', samples['datasets']) - feature_default_assets() diff --git a/components/README.md b/components/README.md deleted file mode 100644 index 3c813192..00000000 --- a/components/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Components - -> A pipeline component is a self-contained set of code that performs one step in the ML workflow (pipeline), such as data preprocessing, data transformation, model training, and so on. A component is analogous to a function, in that it has a name, parameters, return values, and a body. - -## Create a Component -Components are made up of two sets of code. Client code talks to api endpoints for submitting the job. Runtime code does the actual job specified for the component. - -Components must also include a specification file in YAML format. The file includes information for Kubeflow to run the component, such as metadata and input/output specifications. - -The last step is to dockerize the component code. - -For an in-depth guide, take a look at their [component specification](https://www.kubeflow.org/docs/pipelines/reference/component-spec/). - -## Register Pipeline Components -1. Click on the "Components" link in left hand navigation panel -2. Click on "Upload a Component" -3. Select a file to upload (Must be tar.gz or tgz format) - * This will be the compressed .yaml component specification -4. Enter a name for the component; Otherwise a default will be given - -## Use Components in a Pipeline -Components are composed into a pipeline using the Kubeflow Pipelines SDK. Refer to the pipeline -[documentation](../pipelines/README.md) for usage. - -## Sample Components -You can find the sample components in the Machine Learning Exchange catalog -[here](https://github.com/machine-learning-exchange/katalog/tree/main/component-samples) diff --git a/components/template.yaml b/components/template.yaml deleted file mode 100644 index ad3526db..00000000 --- a/components/template.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# SPDX-License-Identifier: Apache-2.0 - -name: -description: -metadata: - annotations: - platform: - source: -inputs: - - {name: , description: , default: } -outputs: - - {name: , description: } -implementation: - container: - image: - command: - args: [ - - ] diff --git a/dashboard/origin-mlx/.dockerignore b/dashboard/origin-mlx/.dockerignore deleted file mode 100644 index cf709889..00000000 --- a/dashboard/origin-mlx/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -**/node_modules diff --git a/dashboard/origin-mlx/Dockerfile b/dashboard/origin-mlx/Dockerfile deleted file mode 100644 index 4aa46f7e..00000000 --- a/dashboard/origin-mlx/Dockerfile +++ /dev/null @@ -1,38 +0,0 @@ -# base image -FROM node:16-slim - -# create app directory -RUN mkdir -p /workspace - -# set working directory -WORKDIR /workspace - -# envrionment variables -ENV PORT=3000 - -# install and cache app dependencies -COPY . /workspace - -RUN npm install --silent --only=prod - -# install and build UI backend -RUN cd server && npm install && npm run build - -# make sure non-root user can modify workspace folder -#RUN chgrp -R 0 /workspace && chmod -R g=u /workspace -RUN chown -R node /workspace - -# change user -USER node - -# mark as production build -ENV NODE_ENV=production - -# run build on container startup in order to build in environment variables -# - https://create-react-app.dev/docs/adding-custom-environment-variables/ -# TODO: find a better solution, i.e. -# - https://www.tutorialworks.com/openshift-deploy-react-app/ -# - https://javaadpatel.com/building-and-deploying-react-containers/ -CMD ["sh", "-c", "npm run build && node server/dist/server.js build/ $PORT"] - - diff --git a/dashboard/origin-mlx/README.md b/dashboard/origin-mlx/README.md deleted file mode 100644 index 109ba8e8..00000000 --- a/dashboard/origin-mlx/README.md +++ /dev/null @@ -1,226 +0,0 @@ -# Machine Learning Exchange - Web UI - -This README contains information about the front end of the Machine Learning Exchange project. - -## Prerequisites - -- [Node.js](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) - to build and run the MLX UI code locally -- [Docker](https://docs.docker.com/get-docker/) to rebuild the MLX UI image -- [`kubectl`](https://kubernetes.io/docs/tasks/tools/#kubectl) to redeploy - the `mlx-ui` service to Kubernetes - - -## Starting the MLX UI locally - -1. First, clone this repo: -```Bash -git clone https://github.com/machine-learning-exchange/mlx.git -``` - -2. Next, install the dependencies by running this command from within the newly created directory: -```Bash -npm install -``` - -3. Start the app with the following command: -```Bash -npm start -``` - -4. The app should now be accessible in your web browser at: -``` -http://localhost:3000 -``` - -## Configure usage of MLX API and KFP API - -If an MLX or KFP API is already deployed you can connect it to the UI in one of the following ways - -* Set the respective environment variable to the endpoint of the API before running npm start - -```Bash -REACT_APP_API= -REACT_APP_KFP=/mlx-ui: -f Dockerfile . -docker push /: -``` - -## (Re-)Deploy to Kubernetes Cluster - -For information on how to deploy MLX on a Kubernetes Cluster or OpenShift on IBM -Cloud, check out the guide [here](/docs/mlx-setup.md). -Once the cluster has been deployed, the new `mlx-ui` container image will need to -be redeployed after changes to the UI code have been made. - -Change the container image in the deployment spec -[/manifests/base/mlx-deployments/mlx-ui.yaml](/manifests/base/mlx-deployments/mlx-ui.yaml) -under `spec.template.spec.containers` with `name: mlx-ui` -from `image: mlexchange/mlx-ui:nightly` -to `image: /:` -and then run: - -```Bash -# navigate to the MLX root directory -# cd ../.. -kubectl delete -f manifests/base/mlx-deployments/mlx-ui.yaml -kubectl apply -f manifests/base/mlx-deployments/mlx-ui.yaml -``` - -Find the UI Host and Port. It may take some time before the MLX UI becomes available. - -```Bash -export UI_HOST=$(kubectl get nodes -o jsonpath='{.items[].status.addresses[?(@.type=="ExternalIP")].address}') -export UI_PORT=$(kubectl get service mlx-ui -n kubeflow -o jsonpath='{.spec.ports[0].nodePort}') -``` - -Open the webpage in a browser: - -```Bash -open "http://${UI_HOST}:${UI_PORT}" -``` - -## UI Development with Docker Compose - -For information on how to get started with Docker Compose before making any changes -to the UI code, check out the [Quick Start Guide](/quickstart/README.md) and -take a look at the [docker-compose.yaml](/quickstart/docker-compose.yaml) file -to understand how the individual services like `mysql`, `minio`, `mlx-api`, `mlx-ui`, -etc. are working together. - -The Docker Compose stack can be brought up and taken down by running the following -commands. The `--project-name` tag keeps the docker compose network and the volumes -(stored assets) separate from the quickstart for development. Each docker compose -project has separate network and volumes which can be viewed using -[Docker Desktop](https://www.docker.com/products/docker-desktop/): - -```Bash -docker compose --project-name mlx up -docker compose --project-name mlx down -``` - -You can test most code changes without a Kubernetes cluster. A K8s cluster is only -required to `run` the generated sample pipeline code. Running the Quickstart with -Docker Compose is sufficient to test any `katalog` related API endpoints. - -A development setup that works very well requires to 2 shell terminals: - -### Terminal 1 - Quickstart without the `mlx-ui` service - -Bring up the Quickstart without the `mlx-ui` service, since we will run the MLX UI -from our local source code, instead of using the pre-built Docker image -`mlexchange/mlx-ui:nightly-origin-main`. - -```Bash -# cd -cd quickstart - -docker compose --project-name no_ui up minio miniosetup mysql mlx-api catalog -``` - -Remember to bring down the Docker Compose stack after testing your UI code changes: - -```Bash -# control + C - -docker compose --project-name no_ui down minio miniosetup mysql mlx-api catalog -``` - -Optional, to delete all data in Minio and MySQL, run the following commands: - -```Bash -docker compose down -v --remove-orphans -docker compose rm -v -f -docker volume prune -f -``` - -### Terminal 2 - Start the MLX UI locally - -Navigate to the UI source folder: - -```Bash -# cd -cd dashboard/origin-mlx -``` - -Install the package dependencies: - -```Bash -rm -f package-lock.json # this may be necessary to prevent npm install errors -npm install -``` - -Set the `REACT_APP_API` environment variable so the MLX UI can connect to the MLX API -backend from the Docker Compose stack: - -```Bash -export REACT_APP_API="localhost:8080" -export REACT_APP_RUN="false" -export REACT_APP_UPLOAD="true" -export REACT_APP_DISABLE_LOGIN="true" -export REACT_APP_KFP_STANDALONE="true" # KFP is standalone deployment or not -export REACT_APP_TTL="0" # Disable the cache -export REACT_APP_CACHE_INTERVAL="0" # Ignore checking cache -``` - -Start the MLX Web UI server: - -```Bash -npm start -``` - -The MLX web UI should open up in your web browser at: - -``` -http://localhost:3000/ -``` - -After testing the UI stop the `npm` server with `control` + `C` - - -# Special Configurations - -There are a few environment variables that can be defined that dictate how MLX is deployed - -* `REACT_APP_API` - The endpoint for the MLX API -* `REACT_APP_KFP` - The endpoint for the KFP API -* `REACT_APP_NBVIEWER_API` - The endpoint for the Notebook Viewer API -* `REACT_APP_KIALI` - The endpoint for Kiali monitoring -* `REACT_APP_GRAFANA` - The endpoint for the Grafana service -* `HTTPS` - true/false, defines whether HTTPS or HTTP should be used -* `REACT_APP_BASE_PATH` - A basepath can be configured that appends to the end of the address (ex. - http://:/) -* `REACT_APP_BRAND` - The brand name to use on the website -* `REACT_APP_DISABLE_LOGIN` - A switch to turn off login mechanism -* `REACT_APP_KFP_STANDALONE` - The KFP is standalone deployment or not -* `REACT_APP_TTL` - The amount of seconds a cached entry remains valid for (24 hours by default) -* `REACT_APP_CACHE_INTERVAL` - The minimum amount of time in seconds between two checks on the validity of the cache's contents (24 hours by default) - -# Caching Details - -The cache stores each request and response pair made from the UI to the API in local storage. If a request is made -which matches a previous request and the difference of the time between the two requests is less than `REACT_APP_TTL` then the previously recorded response is returned. Every `REACT_APP_CACHE_INTERVAL` seconds a new check on the validity of the cache can be run. Whenever the UI is refreshed a check will be made if enough time has passed since the last cache validity check, if so then a cache validity check is started. Any item in the cache which has lasted longer than `REACT_APP_TTL` seconds is removed from the cache. - -To invalidate or hard reset the cache, navigate to the settings page (clicking the three dots at the bottom of the sidebar) and click on the `Reset Cache` button. - -# Development Guidelines: - -For information on UI code structure, design principles, etc. check out the [MLX UI Developer Guide](developer-guide.md). - -# Project Overview: - -![MLX Overview](src/images/image1.png) diff --git a/dashboard/origin-mlx/developer-guide.md b/dashboard/origin-mlx/developer-guide.md deleted file mode 100644 index bd7162e8..00000000 --- a/dashboard/origin-mlx/developer-guide.md +++ /dev/null @@ -1,74 +0,0 @@ -# MLX UI (w/ React) - -## React Design Principles - -The key feature of React is composition of components. React works by having pages use components to add functionality which themselves use components to add functionality. - -![LandingPage](/docs/images/LandingPage.png) - -Image 1: The Landing Page divided into some of its components. - -![MLX UI Diagram](/docs/images/mlx-ui-diagram.png) - -Image 2: MLX UI structure - -### React Props vs. State: - -A components props and state are variables which dictate the changeable content of a component. For example, take a parent component that is a webpage and take a child component which represents a Button. The parent could ask for two Buttons with the text="Press" on one and text="Click" on the other. "Press" and "Click" would be the value of the variable props.text and should not be changed inside of the Button component. The state of these Buttons could be something like "clickNum" which defines how many times the button has been clicked.  -Props - Parameters passed from the parent component. Props should not be changed inside the child component. If a prop is changed in a parent component then the child component will be recreated. -State - Variables that dictate the current condition of the component. State can be changed inside the component. If a state variable is changed in a component then the component will be recreated. - -### Lifecycle Methods: - -Each component has several “lifecycle methods” that you can override to run code at particular times in the process. Putting functions in different lifecycle methods will cause the function to be run at a specific point in a component's lifecycle. An example of this is running a function after a component is being unmounted (removed or refreshed). - - -## UI File Structure - -The folders which contain the pieces of the MLX UI: - -![LandingPage](/docs/images/ui-folder-tree.png) - - - **components/** - Small items which get used inside of pages. For example, the sidebar is used in all the pages, but is not a page itself. The major components are listed below. - - **Button/** - - **Detail/** - The Detail folder contains the specific implementations of each asset type for the MetaDetailPage. The ComponentDetail, for example, has a MetadataView, RunView, and two SourceCodeDisplays. The ComponentDetail file represents the content of the MetaDetailPage for the Component assets. - - **RunView/** - Contains the displays which dictate what parameters the user must fill out when attempting to run any of the assets - - **Sidebar/** - - **Tooltip/** - - - There are other components other than those which make up their own folder. Some of the important ones are listed below. - - Hero - The “Hero Bar” is the bar at the top of the page with mostly navigational items. - - MarkdownViewer - A display which shows the contents of a markdown file - - PageFooter - The content that gets displayed at the bottom of every page - - SecretMenu - The menu which is only available for admins that provides admin’s with extra functionality - -- **icons/** -Icons are typically an `.svg` wrapped in a React component. - -- **images/** -`.png` files used in UI - -- **lib/** `lib/` is divided into two folders `api/` and `stores/` - - `api/` - Contains all the functions which calls to the MLX API - - `stores/` - Contains all the functions which add to and view the MLX UI data store - -- **mock/** -Some mock assets for each asset type (no longer in use). - -- **pages/** -Each file in pages/ is a page that can be visited in the MLX UI - -- **styles/** -Most (>90%) of styling is contained in css files in styles/ - -## Developing for the MLX UI - -### MLX UI Starting Points - -- `src/App.tsx`: controls all the routing inside the react application. If a new route needs to be added it will be added here. If it is not clear what file represents the page at a given url, trace the routes in App.tsx to find the route associated with that url and that route will show the component that is being used. - -- `src/styles/`: contains most (>90%) of the page styling in css. If the style needs to be changed first check the component file for styling and if the css is not inline then check in src/styles/. - -- `src/lib/api/`: contains all the calls to the MLX API. If some API call is going wrong, it will likely be an issue in this folder. - -For more information on UI Setup and Deployment go [here](README.md) diff --git a/dashboard/origin-mlx/mlx-ui.yaml b/dashboard/origin-mlx/mlx-ui.yaml deleted file mode 100644 index 350a656b..00000000 --- a/dashboard/origin-mlx/mlx-ui.yaml +++ /dev/null @@ -1,137 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -apiVersion: v1 -kind: ServiceAccount -metadata: - name: mlx-ui - namespace: kubeflow ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: mlx-ui - namespace: kubeflow - labels: - service: mlx-ui -spec: - replicas: 1 - selector: - matchLabels: - service: mlx-ui - template: - metadata: - name: mlx-ui - labels: - service: mlx-ui - spec: - containers: - - name: mlx-ui - # You can use your own webapp image below - image: mlexchange/mlx-ui:nightly-origin-main - imagePullPolicy: Always - env: - - name: REACT_APP_BRAND - value: "Machine Learning eXchange" - - name: REACT_APP_RUN - value: "true" - - name: REACT_APP_UPLOAD - value: "true" - - name: REACT_APP_BASE_PATH - value: /mlx - ports: - - containerPort: 3000 - serviceAccountName: mlx-ui ---- -apiVersion: v1 -kind: Service -metadata: - name: mlx-ui - namespace: kubeflow - labels: - service: mlx-ui - annotations: - getambassador.io/config: |- - --- - apiVersion: ambassador/v0 - kind: Mapping - name: mlx-ui - prefix: /aiops - rewrite: /aiops - timeout_ms: 300000 - service: mlx-ui.kubeflow - use_websocket: true - --- - apiVersion: ambassador/v0 - kind: Mapping - name: mlx-ui-static - prefix: /static - rewrite: /static - timeout_ms: 300000 - service: mlx-ui.kubeflow - use_websocket: true -spec: - ports: - - port: 80 - protocol: TCP - targetPort: 3000 - type: NodePort - selector: - service: mlx-ui ---- -apiVersion: networking.istio.io/v1alpha3 -kind: VirtualService -metadata: - name: mlx-ui - namespace: kubeflow -spec: - gateways: - - kubeflow-gateway - hosts: - - '*' - http: - - match: - - uri: - prefix: /mlx - rewrite: - uri: /mlx - route: - - destination: - host: mlx-ui.kubeflow.svc.cluster.local - port: - number: 80 - timeout: 300s ---- -apiVersion: rbac.istio.io/v1alpha1 -kind: ServiceRole -metadata: - name: mlx-ui - namespace: kubeflow -spec: - rules: - - services: - - mlx-ui.kubeflow.svc.cluster.local ---- -apiVersion: rbac.istio.io/v1alpha1 -kind: ServiceRoleBinding -metadata: - name: bind-gateway-mlx-ui - namespace: kubeflow -spec: - roleRef: - kind: ServiceRole - name: mlx-ui - subjects: - - properties: - source.namespace: istio-system ---- -apiVersion: networking.istio.io/v1alpha3 -kind: DestinationRule -metadata: - name: mlx-ui - namespace: kubeflow -spec: - host: mlx-ui.kubeflow.svc.cluster.local - trafficPolicy: - tls: - mode: ISTIO_MUTUAL diff --git a/dashboard/origin-mlx/nbviewer-enterprise.yaml b/dashboard/origin-mlx/nbviewer-enterprise.yaml deleted file mode 100644 index caaa1705..00000000 --- a/dashboard/origin-mlx/nbviewer-enterprise.yaml +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 2021 The MLX Contributors -# -# SPDX-License-Identifier: Apache-2.0 -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nbviewer-enterprise - namespace: kubeflow - labels: - service: nbviewer-enterprise -spec: - replicas: 1 - selector: - matchLabels: - service: nbviewer-enterprise - template: - metadata: - name: nbviewer-enterprise - labels: - service: nbviewer-enterprise - spec: - containers: - - name: nbviewer-enterprise - image: jupyter/nbviewer - imagePullPolicy: Always - env: - - name: GITHUB_API_TOKEN - # Fill in the Enterpise github token below - value: '' - - name: GITHUB_API_URL - value: https://github.ibm.com/api/v3/ - ports: - - containerPort: 8080 ---- -apiVersion: v1 -kind: Service -metadata: - name: nbviewer-enterprise - namespace: kubeflow - labels: - service: nbviewer-enterprise -spec: - ports: - - port: 80 - protocol: TCP - targetPort: 8080 - type: LoadBalancer - selector: - service: nbviewer-enterprise diff --git a/dashboard/origin-mlx/package-lock.json b/dashboard/origin-mlx/package-lock.json deleted file mode 100644 index 2938d5e4..00000000 --- a/dashboard/origin-mlx/package-lock.json +++ /dev/null @@ -1,37994 +0,0 @@ -{ - "name": "aiops-frontend", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "aiops-frontend", - "version": "0.1.0", - "dependencies": { - "@material-ui/core": "^3.9.2", - "@material-ui/icons": "^3.0.2", - "@types/dagre": "https://registry.npmjs.org/@types/dagre/-/dagre-0.7.40.tgz", - "@types/jest": "24.0.11", - "@types/js-cookie": "^2.2.6", - "@types/js-yaml": "^3.12.0", - "@types/node": "^14.14.45", - "@types/react": "16.8.7", - "@types/react-dom": "16.8.2", - "@types/react-gtm-module": "^2.0.1", - "@types/react-router-dom": "^4.3.1", - "@types/react-sidebar": "^3.0.0", - "@types/reactstrap": "^8.5.0", - "@types/styled-components": "^4.1.16", - "codemirror": "^5.45.0", - "dagre": "https://registry.npmjs.org/dagre/-/dagre-0.8.4.tgz", - "deepmerge": "^4.0.0", - "fuzzysort": "^1.1.4", - "js-cookie": "^2.2.1", - "js-yaml": "^3.12.2", - "react": "^16.13.1", - "react-codemirror2": "^5.1.0", - "react-dom": "^16.13.1", - "react-gtm-module": "^2.0.11", - "react-markdown": "^8.0.0", - "react-router-dom": "^4.3.1", - "react-scripts": "^3.0.1", - "react-sidebar": "^3.0.2", - "react-tooltip": "^4.2.8", - "reactjs-popup": "^1.5.0", - "reactstrap": "^8.5.1", - "rehype-slug": "^5.0.1", - "remark-gfm": "^3.0.0", - "styled-components": "^4.3.1", - "title-case": "^3.0.3", - "typescript": "^3.5.2", - "typestyle": "^2.0.1", - "yamljs": "^0.3.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", - "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", - "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.5", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.5", - "@babel/types": "^7.18.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", - "dependencies": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", - "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", - "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", - "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", - "dependencies": { - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", - "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", - "dependencies": { - "@babel/types": "^7.18.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", - "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", - "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", - "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", - "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", - "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", - "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz", - "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-decorators": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", - "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", - "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", - "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", - "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", - "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", - "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", - "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", - "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", - "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", - "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", - "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", - "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", - "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", - "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", - "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", - "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", - "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", - "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", - "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", - "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", - "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz", - "integrity": "sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-flow": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", - "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", - "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", - "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", - "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", - "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", - "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", - "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", - "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.12.tgz", - "integrity": "sha512-maEkX2xs2STuv2Px8QuqxqjhV2LsFobT1elCgyU5704fcyTu9DyD/bJXxD/mrRiVyhpHweOQ00OJ5FKhHq9oEw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", - "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/types": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.17.12.tgz", - "integrity": "sha512-7S9G2B44EnYOx74mue02t1uD8ckWZ/ee6Uz/qfdzc35uWHX5NgRy9i+iJSb2LFRgMd+QV9zNcStQaazzzZ3n3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", - "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.0.tgz", - "integrity": "sha512-6+0IK6ouvqDn9bmEG7mEyF/pwlJXVj5lwydybpyyH3D0A7Hftk+NCTdYjnLNZksn261xaOV5ksmp20pQEmc2RQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", - "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", - "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", - "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", - "dependencies": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "resolve": "^1.8.1", - "semver": "^5.5.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", - "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", - "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", - "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", - "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-typescript": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", - "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", - "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-async-generator-functions": "^7.17.12", - "@babel/plugin-proposal-class-properties": "^7.17.12", - "@babel/plugin-proposal-class-static-block": "^7.18.0", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.17.12", - "@babel/plugin-proposal-json-strings": "^7.17.12", - "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.18.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-private-methods": "^7.17.12", - "@babel/plugin-proposal-private-property-in-object": "^7.17.12", - "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.17.12", - "@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/plugin-transform-arrow-functions": "^7.17.12", - "@babel/plugin-transform-async-to-generator": "^7.17.12", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.17.12", - "@babel/plugin-transform-classes": "^7.17.12", - "@babel/plugin-transform-computed-properties": "^7.17.12", - "@babel/plugin-transform-destructuring": "^7.18.0", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.17.12", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.18.1", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.17.12", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.18.0", - "@babel/plugin-transform-modules-commonjs": "^7.18.2", - "@babel/plugin-transform-modules-systemjs": "^7.18.0", - "@babel/plugin-transform-modules-umd": "^7.18.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", - "@babel/plugin-transform-new-target": "^7.17.12", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.17.12", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.18.0", - "@babel/plugin-transform-reserved-words": "^7.17.12", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.17.12", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.18.2", - "@babel/plugin-transform-typeof-symbol": "^7.17.12", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.2", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.17.12.tgz", - "integrity": "sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.17.12", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz", - "integrity": "sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-typescript": "^7.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz", - "integrity": "sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q==", - "dependencies": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@csstools/normalize.css": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", - "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "dependencies": { - "@emotion/memoize": "0.7.4" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "node_modules/@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", - "deprecated": "Moved to 'npm install @sideway/address'" - }, - "node_modules/@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", - "deprecated": "This version has been deprecated and is no longer supported or maintained" - }, - "node_modules/@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", - "deprecated": "This version has been deprecated and is no longer supported or maintained" - }, - "node_modules/@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "deprecated": "Switch to 'npm install joi'", - "dependencies": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" - } - }, - "node_modules/@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "deprecated": "This version has been deprecated and is no longer supported or maintained", - "dependencies": { - "@hapi/hoek": "^8.3.0" - } - }, - "node_modules/@hypnosphi/create-react-context": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz", - "integrity": "sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A==", - "dependencies": { - "gud": "^1.0.0", - "warning": "^4.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": ">=0.14.0" - } - }, - "node_modules/@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dependencies": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "dependencies": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/core/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "dependencies": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "dependencies": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "dependencies": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/schemas": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", - "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", - "dependencies": { - "@sinclair/typebox": "^0.23.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/source-map/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "dependencies": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "dependencies": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@material-ui/core": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-3.9.4.tgz", - "integrity": "sha512-r8QFLSexcYZbnqy/Hn4v8xzmAJV41yaodUVjmbGLi1iGDLG3+W941hEtEiBmxTRRqv2BdK3r4ijILcqKmDv/Sw==", - "deprecated": "You can now upgrade to @mui/material. See the guide: https://mui.com/guides/migration-v4/", - "dependencies": { - "@babel/runtime": "^7.2.0", - "@material-ui/system": "^3.0.0-alpha.0", - "@material-ui/utils": "^3.0.0-alpha.2", - "@types/jss": "^9.5.6", - "@types/react-transition-group": "^2.0.8", - "brcast": "^3.0.1", - "classnames": "^2.2.5", - "csstype": "^2.5.2", - "debounce": "^1.1.0", - "deepmerge": "^3.0.0", - "dom-helpers": "^3.2.1", - "hoist-non-react-statics": "^3.2.1", - "is-plain-object": "^2.0.4", - "jss": "^9.8.7", - "jss-camel-case": "^6.0.0", - "jss-default-unit": "^8.0.2", - "jss-global": "^3.0.0", - "jss-nested": "^6.0.1", - "jss-props-sort": "^6.0.0", - "jss-vendor-prefixer": "^7.0.0", - "normalize-scroll-left": "^0.1.2", - "popper.js": "^1.14.1", - "prop-types": "^15.6.0", - "react-event-listener": "^0.6.2", - "react-transition-group": "^2.2.1", - "recompose": "0.28.0 - 0.30.0", - "warning": "^4.0.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "react": "^16.3.0", - "react-dom": "^16.3.0" - } - }, - "node_modules/@material-ui/core/node_modules/deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@material-ui/icons": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-3.0.2.tgz", - "integrity": "sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g==", - "deprecated": "You can now upgrade to @mui/icons. See the guide: https://mui.com/guides/migration-v4/", - "dependencies": { - "@babel/runtime": "^7.2.0", - "recompose": "0.28.0 - 0.30.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "@material-ui/core": "^3.0.0", - "react": "^16.3.0", - "react-dom": "^16.3.0" - } - }, - "node_modules/@material-ui/system": { - "version": "3.0.0-alpha.2", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-3.0.0-alpha.2.tgz", - "integrity": "sha512-odmxQ0peKpP7RQBQ8koly06YhsPzcoVib1vByVPBH4QhwqBXuYoqlCjt02846fYspAqkrWzjxnWUD311EBbxOA==", - "deprecated": "You can now upgrade to @mui/system. See the guide: https://mui.com/guides/migration-v4/", - "dependencies": { - "@babel/runtime": "^7.2.0", - "deepmerge": "^3.0.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "react": "^16.3.0", - "react-dom": "^16.3.0" - } - }, - "node_modules/@material-ui/system/node_modules/deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@material-ui/utils": { - "version": "3.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz", - "integrity": "sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng==", - "dependencies": { - "@babel/runtime": "^7.2.0", - "prop-types": "^15.6.0", - "react-is": "^16.6.3" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "react": "^16.3.0", - "react-dom": "^16.3.0" - } - }, - "node_modules/@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dependencies": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.23.5", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", - "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==" - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", - "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz", - "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz", - "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz", - "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz", - "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz", - "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz", - "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz", - "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz", - "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", - "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3", - "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", - "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", - "@svgr/babel-plugin-transform-svg-component": "^4.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/core": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz", - "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==", - "dependencies": { - "@svgr/plugin-jsx": "^4.3.3", - "camelcase": "^5.3.1", - "cosmiconfig": "^5.2.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz", - "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==", - "dependencies": { - "@babel/types": "^7.4.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz", - "integrity": "sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w==", - "dependencies": { - "@babel/core": "^7.4.5", - "@svgr/babel-preset": "^4.3.3", - "@svgr/hast-util-to-babel-ast": "^4.3.2", - "svg-parser": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz", - "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==", - "dependencies": { - "cosmiconfig": "^5.2.1", - "merge-deep": "^3.0.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@svgr/webpack": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.3.tgz", - "integrity": "sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg==", - "dependencies": { - "@babel/core": "^7.4.5", - "@babel/plugin-transform-react-constant-elements": "^7.0.0", - "@babel/preset-env": "^7.4.5", - "@babel/preset-react": "^7.0.0", - "@svgr/core": "^4.3.3", - "@svgr/plugin-jsx": "^4.3.3", - "@svgr/plugin-svgo": "^4.3.1", - "loader-utils": "^1.2.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/dagre": { - "version": "0.7.40", - "resolved": "https://registry.npmjs.org/@types/dagre/-/dagre-0.7.40.tgz", - "integrity": "sha512-XvaIdpHNW4AeyvPpKuvdpN8yn4RZBztPhJtLeHRtspCNUcgrZn/B9lA0KMIUlyVdIH77f82KzErR+H/ayrnoyQ==", - "license": "MIT" - }, - "node_modules/@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/history/-/history-5.0.0.tgz", - "integrity": "sha512-hy8b7Y1J8OGe6LbAjj3xniQrj3v6lsivCcrmf4TzSgPzLkhIeKgc5IZnT7ReIqmEuodjfO8EYAuoFvIrHi/+jQ==", - "deprecated": "This is a stub types definition. history provides its own type definitions, so you do not need this installed.", - "dependencies": { - "history": "*" - } - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dependencies": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "24.0.11", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.11.tgz", - "integrity": "sha512-2kLuPC5FDnWIDvaJBzsGTBQaBbnDweznicvK7UGYzlIJP4RJR2a4A/ByLUXEyEgag6jz8eHdlWExGDtH3EYUXQ==", - "dependencies": { - "@types/jest-diff": "*" - } - }, - "node_modules/@types/jest-diff": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-24.3.0.tgz", - "integrity": "sha512-vx1CRDeDUwQ0Pc7v+hS61O1ETA81kD04IMEC0hS1kPyVtHDdZrokAvpF7MT9VI/fVSzicelUZNCepDvhRV1PeA==", - "deprecated": "This is a stub types definition. jest-diff provides its own type definitions, so you do not need this installed.", - "dependencies": { - "jest-diff": "*" - } - }, - "node_modules/@types/js-cookie": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", - "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==" - }, - "node_modules/@types/js-yaml": { - "version": "3.12.7", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz", - "integrity": "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/jss": { - "version": "9.5.8", - "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.8.tgz", - "integrity": "sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA==", - "dependencies": { - "csstype": "^2.0.0", - "indefinite-observable": "^1.0.1" - } - }, - "node_modules/@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "14.18.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", - "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "node_modules/@types/react": { - "version": "16.8.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.7.tgz", - "integrity": "sha512-0xbkIyrDNKUn4IJVf8JaCn+ucao/cq6ZB8O6kSzhrJub1cVSqgTArtG0qCfdERWKMEIvUbrwLXeQMqWEsyr9dA==", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "node_modules/@types/react-dom": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.2.tgz", - "integrity": "sha512-MX7n1wq3G/De15RGAAqnmidzhr2Y9O/ClxPxyqaNg96pGyeXUYPSvujgzEVpLo9oIP4Wn1UETl+rxTN02KEpBw==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-gtm-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/react-gtm-module/-/react-gtm-module-2.0.1.tgz", - "integrity": "sha512-T/DN9gAbCYk5wJ1nxf4pSwmXz4d1iVjM++OoG+mwMfz9STMAotGjSb65gJHOS5bPvl6vLSsJnuC+y/43OQrltg==" - }, - "node_modules/@types/react-native": { - "version": "0.67.8", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.67.8.tgz", - "integrity": "sha512-xA8rYiTHvO6RoZv/LFnmEeqRuhA2y34mGB8zX3bGHe/pCt9jEStUPyUO4q1KcDc9GiGIOBD8ArfRtThprAjSfQ==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.18", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.18.tgz", - "integrity": "sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-4.3.5.tgz", - "integrity": "sha512-eFajSUASYbPHg2BDM1G8Btx+YqGgvROPIg6sBhl3O4kbDdYXdFdfrgQFf/pcBuQVObjfT9AL/dd15jilR5DIEA==", - "dependencies": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/react-router/node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "node_modules/@types/react-sidebar": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/react-sidebar/-/react-sidebar-3.0.2.tgz", - "integrity": "sha512-6ABhGhwv78nZVcHntCkq3ky7qOzKttyfhmEletO0BMkBUVl1+TlJMr6ficypIS8B+lSojLTnM+tQeydtMRRciQ==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-transition-group": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-2.9.2.tgz", - "integrity": "sha512-5Fv2DQNO+GpdPZcxp2x/OQG/H19A01WlmpjVD9cKvVFmoVLOZ9LvBgSWG6pSXIU4og5fgbvGPaCV5+VGkWAEHA==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/reactstrap": { - "version": "8.7.2", - "resolved": "https://registry.npmjs.org/@types/reactstrap/-/reactstrap-8.7.2.tgz", - "integrity": "sha512-8sYGS/LhG+ic8vhLwxhuVn+TSqS1lKzplm9BHv4JaQoetStAi9uOqP2VREfefIRT3JnOq5Y+G7Afdryvn+UgZQ==", - "deprecated": "This is a stub types definition. reactstrap provides its own type definitions, so you do not need this installed.", - "dependencies": { - "reactstrap": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" - }, - "node_modules/@types/styled-components": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-4.4.3.tgz", - "integrity": "sha512-U0udeNOZBfUkJycmGJwmzun0FBt11rZy08weVQmE2xfUNAbX8AGOEWxWna2d+qAUKxKgMlcG+TZT0+K2FfDcnQ==", - "dependencies": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "@types/react-native": "*", - "csstype": "^2.2.0" - } - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "node_modules/@types/yargs": { - "version": "13.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", - "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "dependencies": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^2.0.0", - "eslint": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "dependencies": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", - "dependencies": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", - "dependencies": { - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", - "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", - "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", - "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", - "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", - "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", - "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", - "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dependencies": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==" - }, - "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", - "dependencies": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, - "node_modules/arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==" - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - }, - "node_modules/autoprefixer/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==" - }, - "node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-extract-comments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", - "dependencies": { - "babylon": "^6.18.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "dependencies": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "dependencies": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 6.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "dependencies": { - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-macros/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-plugin-macros/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-plugin-macros/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-macros/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "peerDependencies": { - "@babel/core": "^7.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" - }, - "peerDependencies": { - "styled-components": ">= 2" - } - }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" - }, - "node_modules/babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha512-C4Aq+GaAj83pRQ0EFgTvw5YO6T3Qz2KGrNRwIj9mSoNHVvdZY4KO2uA6HNtNXCw993iSZnckY1aLW8nOi8i4+w==" - }, - "node_modules/babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha512-ocgA9VJvyxwt+qJB0ncxV8kb/CjfTcECUY4tQ5VT7nP6Aohzobm8CDFaQ5FHdvZQzLmf0sgDxB8iRXZXxwZcyA==", - "dependencies": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "node_modules/babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "dependencies": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-react-app": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.1.2.tgz", - "integrity": "sha512-k58RtQOKH21NyKtzptoAvtAODuAJJs3ZhqBMl456/GnXEQ/0La92pNmwgWoMn5pBTrsvk3YYXdY7zpY4e3UIxA==", - "dependencies": { - "@babel/core": "7.9.0", - "@babel/plugin-proposal-class-properties": "7.8.3", - "@babel/plugin-proposal-decorators": "7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.8.3", - "@babel/plugin-proposal-numeric-separator": "7.8.3", - "@babel/plugin-proposal-optional-chaining": "7.9.0", - "@babel/plugin-transform-flow-strip-types": "7.9.0", - "@babel/plugin-transform-react-display-name": "7.8.3", - "@babel/plugin-transform-runtime": "7.9.0", - "@babel/preset-env": "7.9.0", - "@babel/preset-react": "7.9.1", - "@babel/preset-typescript": "7.9.0", - "@babel/runtime": "7.9.0", - "babel-plugin-macros": "2.8.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24" - } - }, - "node_modules/babel-preset-react-app/node_modules/@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/babel-preset-react-app/node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", - "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-react-app/node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-react-app/node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", - "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-react-app/node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", - "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-react-app/node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz", - "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-react-app/node_modules/@babel/preset-env": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", - "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", - "dependencies": { - "@babel/compat-data": "^7.9.0", - "@babel/helper-compilation-targets": "^7.8.7", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-numeric-separator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.9.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.8.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.9.0", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.8.3", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.9.0", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.9.0", - "@babel/plugin-transform-modules-commonjs": "^7.9.0", - "@babel/plugin-transform-modules-systemjs": "^7.9.0", - "@babel/plugin-transform-modules-umd": "^7.9.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.7", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.7", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.9.0", - "browserslist": "^4.9.1", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-react-app/node_modules/@babel/preset-react": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.1.tgz", - "integrity": "sha512-aJBYF23MPj0RNdp/4bHnAP0NVqqZRr9kl0NAOP4nJCex6OYVio59+dnQzsAWFuogdLyeaKA1hmfUIVZkY5J+TQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.9.1", - "@babel/plugin-transform-react-jsx-development": "^7.9.0", - "@babel/plugin-transform-react-jsx-self": "^7.9.0", - "@babel/plugin-transform-react-jsx-source": "^7.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-react-app/node_modules/@babel/runtime": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.0.tgz", - "integrity": "sha512-cTIudHnzuWLS56ik4DnRnqqNf8MkdUzV4iFFI1h7Jo9xvrpQROYaAnaSd2mHLQAzzZAPfATynX5ord6YlNYNMA==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/babel-preset-react-app/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/babel-preset-react-app/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-runtime/node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true - }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "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.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/brcast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/brcast/-/brcast-3.0.2.tgz", - "integrity": "sha512-f5XwwFCCuvgqP2nMH/hJ74FqnGmb4X3D+NC//HphxJzzhsZvSZa+Hk/syB7j3ZHpPDLMoYU8oBgviRWfNvEfKA==" - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "node_modules/browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dependencies": { - "resolve": "1.1.7" - } - }, - "node_modules/browser-resolve/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.20.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", - "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001349", - "electron-to-chromium": "^1.4.147", - "escalade": "^3.1.1", - "node-releases": "^2.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "node_modules/buffer/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", - "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", - "dependencies": { - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^7.0.0", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cacache/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==" - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "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" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001352", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001352.tgz", - "integrity": "sha512-GUgH8w6YergqPQDGWhJGt8GDRnY0L/iJVQcU3eJ46GYf52R8tk0Wxp0PymuFVZboJYXGiCqwozAYZNRjVj6IcA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", - "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/change-emitter": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", - "integrity": "sha512-YXzt1cQ4a2jqazhcuSWEOc1K2q8g9H6eWNsyZgi640LDzRWVQ2eDe+Y/kVdftH+vYdPF2rgDb3dLdpxE1jvAxw==" - }, - "node_modules/character-entities": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.1.tgz", - "integrity": "sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/chokidar/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "node_modules/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", - "dependencies": { - "for-own": "^0.1.3", - "is-plain-object": "^2.0.1", - "kind-of": "^3.0.2", - "lazy-cache": "^1.0.3", - "shallow-clone": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/codemirror": { - "version": "5.65.5", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.5.tgz", - "integrity": "sha512-HNyhvGLnYz5c+kIsB9QKVitiZUevha3ovbIYaQiGzKo7ECSL/elWD9RXt3JgNr0NdnyqE9/Rc/7uLfkJQL638w==" - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz", - "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==", - "dependencies": { - "arity-n": "^1.0.4" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" - }, - "node_modules/contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js": { - "version": "3.23.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.1.tgz", - "integrity": "sha512-wfMYHWi1WQjpgZNC9kAlN4ut04TM9fUTdi7CqIoTVM7yaiOUQTklOzfb+oWH3r9edQcT3F887swuVmxrV+CC8w==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.23.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.1.tgz", - "integrity": "sha512-KeYrEc8t6FJsKYB2qnDwRHWaC0cJNaqlHfCpMe5q3j/W1nje3moib/txNklddLPCtGb+etcBIyJ8zuMa/LN5/A==", - "dependencies": { - "browserslist": "^4.20.4", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-js-pure": { - "version": "3.23.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.1.tgz", - "integrity": "sha512-3qNgf6TqI3U1uhuSYRzJZGfFd4T+YlbyVPl+jgRiKjdZopvG4keZQwWZDAWpu1UH9nCgTpUzIV3GFawC7cJsqg==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dependencies": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "node_modules/css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "dependencies": { - "postcss": "^7.0.5" - }, - "bin": { - "css-blank-pseudo": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", - "engines": { - "node": "*" - } - }, - "node_modules/css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dependencies": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - }, - "engines": { - "node": ">4" - } - }, - "node_modules/css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "bin": { - "css-has-pseudo": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", - "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", - "dependencies": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "dependencies": { - "postcss": "^7.0.5" - }, - "bin": { - "css-prefers-color-scheme": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "node_modules/css-to-react-native": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", - "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" - } - }, - "node_modules/css-to-react-native/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-vendor": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", - "integrity": "sha512-Vx/Vl3zsHj32Z+WTNzGjd2iSbSIJTYHMmyGUT2nzCjj0Xk4qLfwpQ8nF6TQ5oo3Cf0s/An3DTc7LclH1BkAXbQ==", - "dependencies": { - "is-in-browser": "^1.0.2" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", - "dependencies": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "dependencies": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "node_modules/cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dependencies": { - "cssom": "0.3.x" - } - }, - "node_modules/csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" - }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dagre": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.4.tgz", - "integrity": "sha512-Dj0csFDrWYKdavwROb9FccHfTC4fJbyF/oJdL9LNZJ8WUvl968P6PAKEriGqfbdArVJEmmfA+UyumgWEwcHU6A==", - "license": "MIT", - "dependencies": { - "graphlib": "^2.1.7", - "lodash": "^4.17.4" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dependencies": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", - "engines": { - "node": ">=6" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dependencies": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dependencies": { - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.154", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.154.tgz", - "integrity": "sha512-GbV9djOkrnj6xmW+YYVVEI3VCQnJ0pnSTu7TW2JyjKd5cakoiSaG5R4RbEtfaD92GsY10DzbU3GYRe+IOA9kqA==" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-react-app": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", - "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", - "dependencies": { - "confusing-browser-globals": "^1.0.9" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "2.x", - "@typescript-eslint/parser": "2.x", - "babel-eslint": "10.x", - "eslint": "6.x", - "eslint-plugin-flowtype": "3.x || 4.x", - "eslint-plugin-import": "2.x", - "eslint-plugin-jsx-a11y": "6.x", - "eslint-plugin-react": "7.x", - "eslint-plugin-react-hooks": "1.x || 2.x" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz", - "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==", - "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin", - "dependencies": { - "fs-extra": "^8.1.0", - "loader-fs-cache": "^1.0.2", - "loader-utils": "^1.2.3", - "object-hash": "^2.0.1", - "schema-utils": "^2.6.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0", - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz", - "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==", - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": ">=6.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", - "dependencies": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.1", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.0", - "read-pkg-up": "^2.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "2.x - 6.x" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", - "dependencies": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", - "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", - "dependencies": { - "@babel/runtime": "^7.4.5", - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", - "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.2", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^7.0.2", - "has": "^1.0.3", - "jsx-ast-utils": "^2.2.1" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz", - "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==", - "dependencies": { - "array-includes": "^3.1.1", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.2.3", - "object.entries": "^1.1.1", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.15.1", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.2", - "xregexp": "^4.3.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", - "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==", - "engines": { - "node": ">=7" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/eslint/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/eventsource": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.2.tgz", - "integrity": "sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/expect/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/expect/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/expect/node_modules/jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/express/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "dependencies": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fbjs": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", - "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", - "dependencies": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "node_modules/fbjs/node_modules/core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==", - "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js." - }, - "node_modules/fbjs/node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/file-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", - "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", - "dependencies": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.5.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "node_modules/filesize": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", - "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, - "node_modules/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash." - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", - "dependencies": { - "babel-code-frame": "^6.22.0", - "chalk": "^2.4.1", - "chokidar": "^3.3.0", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "engines": { - "node": ">=6.11.5", - "yarn": ">=1.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/free-style": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/free-style/-/free-style-3.1.0.tgz", - "integrity": "sha512-vJujYSIyT30iDoaoeigNAxX4yB1RUrh+N2ZMhIElMr3BvCuGXOw7XNJMEEJkDUeamK2Rnb/IKFGKRKlTWIGRWA==" - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/fuzzysort": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-1.9.0.tgz", - "integrity": "sha512-MOxCT0qLTwLqmEwc7UtU045RKef7mc8Qz8eR4r2bLNEq9dy/c3ZKMEFp6IEst69otkQdFZ4FfgH2dmZD+ddX1g==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==" - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "dependencies": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - }, - "node_modules/globby/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==" - }, - "node_modules/gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, - "node_modules/gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dependencies": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hast-util-has-property": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.0.tgz", - "integrity": "sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-heading-rank": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-2.1.0.tgz", - "integrity": "sha512-w+Rw20Q/iWp2Bcnr6uTrYU6/ftZLbHKhvc8nM26VIWpDqDMlku2iXUVTeOlsdoih/UKQhY7PHQ+vZ0Aqq8bxtQ==", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-2.0.0.tgz", - "integrity": "sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", - "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "node_modules/history": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", - "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", - "dependencies": { - "@babel/runtime": "^7.7.6" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==" - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==" - }, - "node_modules/html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dependencies": { - "whatwg-encoding": "^1.0.1" - } - }, - "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/html-webpack-plugin": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", - "integrity": "sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==", - "deprecated": "please switch to a stable version", - "dependencies": { - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "engines": { - "node": ">=6.9" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "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" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" - }, - "node_modules/hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "dependencies": { - "postcss": "^7.0.14" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" - }, - "node_modules/import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", - "dependencies": { - "import-from": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indefinite-observable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/indefinite-observable/-/indefinite-observable-1.0.2.tgz", - "integrity": "sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA==", - "dependencies": { - "symbol-observable": "1.2.0" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==" - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", - "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "node_modules/istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dependencies": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dependencies": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dependencies": { - "html-escaper": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "dependencies": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "dependencies": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "dependencies": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-config/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-config/node_modules/jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-config/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-diff": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", - "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "dependencies": { - "detect-newline": "^2.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "dependencies": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-each/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-each/node_modules/jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-each/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "dependencies": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-environment-jsdom-fourteen": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-1.0.1.tgz", - "integrity": "sha512-DojMX1sY+at5Ep+O9yME34CdidZnO3/zfPh8UW+918C5fIZET5vCjfkegixmsi7AtdYfkr4bPlIzmWnlvQkP7Q==", - "dependencies": { - "@jest/environment": "^24.3.0", - "@jest/fake-timers": "^24.3.0", - "@jest/types": "^24.3.0", - "jest-mock": "^24.0.0", - "jest-util": "^24.0.0", - "jsdom": "^14.1.0" - } - }, - "node_modules/jest-environment-jsdom-fourteen/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jest-environment-jsdom-fourteen/node_modules/jsdom": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", - "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", - "dependencies": { - "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", - "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.0", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.1.3", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom-fourteen/node_modules/parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" - }, - "node_modules/jest-environment-jsdom-fourteen/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/jest-environment-jsdom-fourteen/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "dependencies": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "dependencies": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 6" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/jest-haste-map/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-jasmine2/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "dependencies": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-leak-detector/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-leak-detector/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-leak-detector/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-leak-detector/node_modules/jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "dependencies": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-matcher-utils/node_modules/diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-matcher-utils/node_modules/jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dependencies": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-matcher-utils/node_modules/jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "dependencies": { - "@jest/types": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "dependencies": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "dependencies": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "dependencies": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "dependencies": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-snapshot/node_modules/diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dependencies": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "dependencies": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-util/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dependencies": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-validate/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-validate/node_modules/jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dependencies": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watch-typeahead": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz", - "integrity": "sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.1", - "jest-regex-util": "^24.9.0", - "jest-watcher": "^24.3.0", - "slash": "^3.0.0", - "string-length": "^3.1.0", - "strip-ansi": "^5.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-watch-typeahead/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "dependencies": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "dependencies": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-watcher/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "node_modules/jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dependencies": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==", - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/jss": { - "version": "9.8.7", - "resolved": "https://registry.npmjs.org/jss/-/jss-9.8.7.tgz", - "integrity": "sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==", - "hasInstallScript": true, - "dependencies": { - "is-in-browser": "^1.1.3", - "symbol-observable": "^1.1.0", - "warning": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jss-camel-case": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jss-camel-case/-/jss-camel-case-6.1.0.tgz", - "integrity": "sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==", - "dependencies": { - "hyphenate-style-name": "^1.0.2" - }, - "peerDependencies": { - "jss": "^9.7.0" - } - }, - "node_modules/jss-default-unit": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/jss-default-unit/-/jss-default-unit-8.0.2.tgz", - "integrity": "sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg==", - "peerDependencies": { - "jss": "^9.4.0" - } - }, - "node_modules/jss-global": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jss-global/-/jss-global-3.0.0.tgz", - "integrity": "sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q==", - "peerDependencies": { - "jss": "^9.0.0" - } - }, - "node_modules/jss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jss-nested/-/jss-nested-6.0.1.tgz", - "integrity": "sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==", - "dependencies": { - "warning": "^3.0.0" - }, - "peerDependencies": { - "jss": "^9.0.0" - } - }, - "node_modules/jss-nested/node_modules/warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/jss-props-sort": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/jss-props-sort/-/jss-props-sort-6.0.0.tgz", - "integrity": "sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g==", - "peerDependencies": { - "jss": "^9.0.0" - } - }, - "node_modules/jss-vendor-prefixer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz", - "integrity": "sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA==", - "dependencies": { - "css-vendor": "^0.3.8" - }, - "peerDependencies": { - "jss": "^9.0.0" - } - }, - "node_modules/jss/node_modules/warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", - "dependencies": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dependencies": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "deprecated": "use String.prototype.padStart()" - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dependencies": { - "leven": "^3.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-fs-cache": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", - "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", - "dependencies": { - "find-cache-dir": "^0.1.1", - "mkdirp": "^0.5.1" - } - }, - "node_modules/loader-fs-cache/node_modules/find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==", - "dependencies": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-fs-cache/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-fs-cache/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-fs-cache/node_modules/pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==", - "dependencies": { - "find-up": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dependencies": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/loglevel": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", - "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/longest-streak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", - "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-table": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz", - "integrity": "sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdast-util-definitions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz", - "integrity": "sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.0.tgz", - "integrity": "sha512-bz8hUWkMX7UcasORORcyBEsTKJ+dBiFwRPrm43hHC9NMRylIMLbfO5rwfeCN+UtY4AAi7s8WqXftb9eX6ZsqCg==", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", - "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", - "dependencies": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-gfm-autolink-literal": "^1.0.0", - "mdast-util-gfm-footnote": "^1.0.0", - "mdast-util-gfm-strikethrough": "^1.0.0", - "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz", - "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-find-and-replace": "^2.0.0", - "micromark-util-character": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz", - "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-util-normalize-identifier": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.1.tgz", - "integrity": "sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz", - "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==", - "dependencies": { - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz", - "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz", - "integrity": "sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/mdurl": "^1.0.0", - "mdast-util-definitions": "^5.0.0", - "mdurl": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "unist-builder": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", - "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/merge-anything": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-2.4.4.tgz", - "integrity": "sha512-l5XlriUDJKQT12bH+rVhAHjwIuXWdAIecGwsYjv2LJo+dA1AeRTmeQS+3QBpO6lEthBMDi2IUMpLC1yyRvGlwQ==", - "dependencies": { - "is-what": "^3.3.1" - } - }, - "node_modules/merge-deep": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", - "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", - "dependencies": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "node_modules/micromark": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", - "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", - "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-footnote": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz", - "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", - "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", - "dependencies": { - "micromark-core-commonmark": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz", - "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz", - "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz", - "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==", - "dependencies": { - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz", - "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", - "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", - "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", - "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", - "dependencies": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.4.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", - "dependencies": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-object/node_modules/for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-object/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "node_modules/nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "node_modules/node-notifier": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.5.tgz", - "integrity": "sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==", - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node_modules/node-notifier/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-scroll-left": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz", - "integrity": "sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg==" - }, - "node_modules/normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", - "dependencies": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==" - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", - "dependencies": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/optimize-css-assets-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", - "dependencies": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha512-J/e9xiZZQNrt+958FFzJ+auItsBGq+UrQ7nE89AUP7UOTtjHnkISANXLdayhVzh538UnLMCSlf13lFfRIAKQOA==", - "dependencies": { - "p-reduce": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dependencies": { - "retry": "^0.12.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-type/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" - }, - "node_modules/pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "dependencies": { - "ts-pnp": "^1.1.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", - "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - } - }, - "node_modules/postcss-browser-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", - "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", - "dependencies": { - "postcss": "^7" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "browserslist": "^4" - } - }, - "node_modules/postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dependencies": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "dependencies": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dependencies": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-colormin/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "dependencies": { - "postcss": "^7.0.14" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dependencies": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-selectors/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "dependencies": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz", - "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==", - "dependencies": { - "postcss": "^7.0.0" - } - }, - "node_modules/postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "dependencies": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "dependencies": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dependencies": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dependencies": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dependencies": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dependencies": { - "postcss": "^7.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dependencies": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dependencies": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "node_modules/postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-normalize": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz", - "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==", - "dependencies": { - "@csstools/normalize.css": "^10.1.0", - "browserslist": "^4.6.2", - "postcss": "^7.0.17", - "postcss-browser-comments": "^3.0.0", - "sanitize.css": "^10.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dependencies": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dependencies": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-url/node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dependencies": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-safe-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", - "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "dependencies": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "dependencies": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dependencies": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=6.14.4" - } - }, - "node_modules/postcss/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "node_modules/pretty-format": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", - "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", - "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz", - "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", - "dependencies": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-app-polyfill": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz", - "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==", - "dependencies": { - "core-js": "^3.5.0", - "object-assign": "^4.1.1", - "promise": "^8.0.3", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.3", - "whatwg-fetch": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/react-codemirror2": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-codemirror2/-/react-codemirror2-5.1.0.tgz", - "integrity": "sha512-Cksbgbviuf2mJfMyrKmcu7ycK6zX/ukuQO8dvRZdFWqATf5joalhjFc6etnBdGCcPA2LbhIwz+OPnQxLN/j1Fw==", - "peerDependencies": { - "codemirror": "5.x", - "react": ">=15.5 <=16.x" - } - }, - "node_modules/react-dev-utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", - "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", - "dependencies": { - "@babel/code-frame": "7.8.3", - "address": "1.1.2", - "browserslist": "4.10.0", - "chalk": "2.4.2", - "cross-spawn": "7.0.1", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.0.1", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "3.1.1", - "global-modules": "2.0.0", - "globby": "8.0.2", - "gzip-size": "5.1.1", - "immer": "1.10.0", - "inquirer": "7.0.4", - "is-root": "2.1.0", - "loader-utils": "1.2.3", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "react-error-overlay": "^6.0.7", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "engines": { - "node": ">=8.10" - } - }, - "node_modules/react-dev-utils/node_modules/@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dependencies": { - "@babel/highlight": "^7.8.3" - } - }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/browserslist": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", - "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", - "dependencies": { - "caniuse-lite": "^1.0.30001035", - "electron-to-chromium": "^1.3.378", - "node-releases": "^1.1.52", - "pkg-up": "^3.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/react-dev-utils/node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" - }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/react-dev-utils/node_modules/cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/react-dev-utils/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.2.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/react-dev-utils/node_modules/inquirer/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/react-dev-utils/node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/react-dev-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==" - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.14.0" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-event-listener": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.6.tgz", - "integrity": "sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==", - "dependencies": { - "@babel/runtime": "^7.2.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" - }, - "peerDependencies": { - "react": "^16.3.0" - } - }, - "node_modules/react-gtm-module": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/react-gtm-module/-/react-gtm-module-2.0.11.tgz", - "integrity": "sha512-8gyj4TTxeP7eEyc2QKawEuQoAZdjKvMY4pgWfycGmqGByhs17fR+zEBs0JUDq4US/l+vbTl+6zvUIx27iDo/Vw==" - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-markdown": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.3.tgz", - "integrity": "sha512-We36SfqaKoVNpN1QqsZwWSv/OZt5J15LNgTLWynwAN5b265hrQrsjMtlRNwUvS+YyR3yDM8HpTNc4pK9H/Gc0A==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/prop-types": "^15.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "prop-types": "^15.0.0", - "property-information": "^6.0.0", - "react-is": "^18.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.3.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/react-markdown/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" - }, - "node_modules/react-popper": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz", - "integrity": "sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "@hypnosphi/create-react-context": "^0.3.1", - "deep-equal": "^1.1.1", - "popper.js": "^1.14.4", - "prop-types": "^15.6.1", - "typed-styles": "^0.0.7", - "warning": "^4.0.2" - }, - "peerDependencies": { - "react": "0.14.x || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/react-router": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", - "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", - "dependencies": { - "history": "^4.7.2", - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.1", - "warning": "^4.0.1" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-dom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", - "dependencies": { - "history": "^4.7.2", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.1", - "react-router": "^4.3.1", - "warning": "^4.0.1" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-dom/node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/react-router/node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/react-router/node_modules/hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - }, - "node_modules/react-scripts": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.4.tgz", - "integrity": "sha512-7J7GZyF/QvZkKAZLneiOIhHozvOMHey7hO9cdO9u68jjhGZlI8hDdOm6UyuHofn6Ajc9Uji5I6Psm/nKNuWdyw==", - "dependencies": { - "@babel/core": "7.9.0", - "@svgr/webpack": "4.3.3", - "@typescript-eslint/eslint-plugin": "^2.10.0", - "@typescript-eslint/parser": "^2.10.0", - "babel-eslint": "10.1.0", - "babel-jest": "^24.9.0", - "babel-loader": "8.1.0", - "babel-plugin-named-asset-import": "^0.3.6", - "babel-preset-react-app": "^9.1.2", - "camelcase": "^5.3.1", - "case-sensitive-paths-webpack-plugin": "2.3.0", - "css-loader": "3.4.2", - "dotenv": "8.2.0", - "dotenv-expand": "5.1.0", - "eslint": "^6.6.0", - "eslint-config-react-app": "^5.2.1", - "eslint-loader": "3.0.3", - "eslint-plugin-flowtype": "4.6.0", - "eslint-plugin-import": "2.20.1", - "eslint-plugin-jsx-a11y": "6.2.3", - "eslint-plugin-react": "7.19.0", - "eslint-plugin-react-hooks": "^1.6.1", - "file-loader": "4.3.0", - "fs-extra": "^8.1.0", - "html-webpack-plugin": "4.0.0-beta.11", - "identity-obj-proxy": "3.0.0", - "jest": "24.9.0", - "jest-environment-jsdom-fourteen": "1.0.1", - "jest-resolve": "24.9.0", - "jest-watch-typeahead": "0.4.2", - "mini-css-extract-plugin": "0.9.0", - "optimize-css-assets-webpack-plugin": "5.0.3", - "pnp-webpack-plugin": "1.6.4", - "postcss-flexbugs-fixes": "4.1.0", - "postcss-loader": "3.0.0", - "postcss-normalize": "8.0.1", - "postcss-preset-env": "6.7.0", - "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^1.0.6", - "react-dev-utils": "^10.2.1", - "resolve": "1.15.0", - "resolve-url-loader": "3.1.2", - "sass-loader": "8.0.2", - "semver": "6.3.0", - "style-loader": "0.23.1", - "terser-webpack-plugin": "2.3.8", - "ts-pnp": "1.1.6", - "url-loader": "2.3.0", - "webpack": "4.42.0", - "webpack-dev-server": "3.11.0", - "webpack-manifest-plugin": "2.2.0", - "workbox-webpack-plugin": "4.3.1" - }, - "bin": { - "react-scripts": "bin/react-scripts.js" - }, - "engines": { - "node": ">=8.10" - }, - "optionalDependencies": { - "fsevents": "2.1.2" - }, - "peerDependencies": { - "typescript": "^3.2.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/react-scripts/node_modules/@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/react-scripts/node_modules/@babel/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/react-scripts/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-sidebar": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/react-sidebar/-/react-sidebar-3.0.2.tgz", - "integrity": "sha512-LG/JO1cJvdRqSmUT+DOhJrml/b45/UqM9nm8emcgbJb5EKNegKCObZcrRqyzVix42VfFf0odytviAAFEYYTu1Q==", - "dependencies": { - "@babel/runtime": ">=7.0.0-beta.56", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.4.2", - "react-dom": ">=16.4.2" - } - }, - "node_modules/react-tooltip": { - "version": "4.2.21", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.2.21.tgz", - "integrity": "sha512-zSLprMymBDowknr0KVDiJ05IjZn9mQhhg4PRsqln0OZtURAJ1snt1xi5daZfagsh6vfsziZrc9pErPTDY1ACig==", - "dependencies": { - "prop-types": "^15.7.2", - "uuid": "^7.0.3" - }, - "engines": { - "npm": ">=6.13" - }, - "peerDependencies": { - "react": ">=16.0.0", - "react-dom": ">=16.0.0" - } - }, - "node_modules/react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "dependencies": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": ">=15.0.0", - "react-dom": ">=15.0.0" - } - }, - "node_modules/reactjs-popup": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reactjs-popup/-/reactjs-popup-1.5.0.tgz", - "integrity": "sha512-9uoxUAcUomnNoBtdYXBmgsF4w46llsogE3tOvLb5IkR5MMrD6UZJK20ip9kDKXCYubSxNkdfQKqSb/c95rf/qA==", - "peerDependencies": { - "prop-types": "^15.6.0", - "react": "^16.0.0", - "react-dom": "^16.0.0" - } - }, - "node_modules/reactstrap": { - "version": "8.10.1", - "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-8.10.1.tgz", - "integrity": "sha512-StjLADa/12yMNjafrSs+UD7sZAGtKpLO9fZp++2Dj0IzJinqY7eQhXlM3nFf0q40YsIcLvQdFc9pKF8PF4f0Qg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "classnames": "^2.2.3", - "prop-types": "^15.5.8", - "react-popper": "^1.3.6", - "react-transition-group": "^3.0.0" - }, - "peerDependencies": { - "react": ">=16.3.0", - "react-dom": ">=16.3.0" - } - }, - "node_modules/reactstrap/node_modules/react-transition-group": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-3.0.0.tgz", - "integrity": "sha512-A9ojB/LWECbFj58SNfjK1X9aaAU+1olLS0DFSikvrr2KfMaiBELemHDa5dKNvcTk2t3gUtDL/PJpFrBKDfMpLg==", - "dependencies": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==", - "dependencies": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==", - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==", - "dependencies": { - "pify": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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" - } - }, - "node_modules/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dependencies": { - "util.promisify": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/recompose": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.30.0.tgz", - "integrity": "sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "react-lifecycles-compat": "^3.0.2", - "symbol-observable": "^1.0.4" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/recompose/node_modules/hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, - "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/rehype-slug": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-5.0.1.tgz", - "integrity": "sha512-X5v3wV/meuOX9NFcGhJvUpEjIvQl2gDvjg3z40RVprYFt7q3th4qMmYLULiu3gXvbNX1ppx+oaa6JyY1W67pTA==", - "dependencies": { - "@types/hast": "^2.0.0", - "github-slugger": "^1.1.1", - "hast-util-has-property": "^2.0.0", - "hast-util-heading-rank": "^2.0.0", - "hast-util-to-string": "^2.0.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-gfm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", - "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^2.0.0", - "micromark-extension-gfm": "^2.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", - "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "node_modules/renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", - "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", - "dependencies": { - "adjust-sourcemap-loader": "3.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/resolve-url-loader/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/resolve-url-loader/node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/resolve-url-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url-loader/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha512-eEjL8FdkdsxApd0yWVZgBGzfCQiT8yqSc2H1p4jpZpQdtz7ohETiDMoje5PlM8I9WgkqkreVxFUKYOiJdVWDXw==", - "dependencies": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - } - }, - "node_modules/rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha512-W6V2fix7nCLUYX1v6eGPrBOZlc03/faqzP4sUxMAJMBMOPYhfV/RyLegTufn5gJKaOITyi+gvf0LXDZ9NzkHnQ==" - }, - "node_modules/rework/node_modules/convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg==" - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==" - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==" - }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sanitize.css": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz", - "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" - }, - "node_modules/sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", - "dependencies": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0", - "sass": "^1.3.0", - "webpack": "^4.36.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/sass-loader/node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sass-loader/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sass-loader/node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "dependencies": { - "xmlchars": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "1.10.14", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", - "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", - "dependencies": { - "node-forge": "^0.10.0" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", - "dependencies": { - "is-extendable": "^0.1.1", - "kind-of": "^2.0.1", - "lazy-cache": "^0.2.3", - "mixin-object": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", - "dependencies": { - "is-buffer": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone/node_modules/lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", - "dependencies": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" - } - }, - "node_modules/sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "dependencies": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/sockjs-client/node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" - }, - "node_modules/space-separated-tokens": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz", - "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "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" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "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" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssri": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.1.tgz", - "integrity": "sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw==", - "dependencies": { - "figgy-pudding": "^3.5.1", - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "node_modules/stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha512-Qka42GGrS8Mm3SZ+7cH8UXiIWI867/b/Z/feQSpQx/rbfB8UGknGEZVaUQMOUVj+soY6NpWAxily63HI1OckVQ==", - "dependencies": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", - "dependencies": { - "babel-extract-comments": "^1.0.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", - "dependencies": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/style-loader/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/styled-components": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-4.4.1.tgz", - "integrity": "sha512-RNqj14kYzw++6Sr38n7197xG33ipEOktGElty4I70IKzQF1jzaD1U4xQ+Ny/i03UUhHlC5NWEO+d8olRCDji6g==", - "hasInstallScript": true, - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@emotion/is-prop-valid": "^0.8.1", - "@emotion/unitless": "^0.7.0", - "babel-plugin-styled-components": ">= 1", - "css-to-react-native": "^2.2.2", - "memoize-one": "^5.0.0", - "merge-anything": "^2.2.4", - "prop-types": "^15.5.4", - "react-is": "^16.6.0", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10", - "supports-color": "^5.5.0" - }, - "peerDependencies": { - "react": ">= 16.3.0", - "react-dom": ">= 16.3.0" - } - }, - "node_modules/styled-components/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/styled-components/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "node_modules/stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", - "peerDependencies": { - "stylis": "^3.5.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "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" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", - "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", - "dependencies": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.3.1", - "jest-worker": "^25.4.0", - "p-limit": "^2.3.0", - "schema-utils": "^2.6.6", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.6.12", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 8.3" - } - }, - "node_modules/terser-webpack-plugin/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/terser-webpack-plugin/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser-webpack-plugin/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/terser-webpack-plugin/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/terser-webpack-plugin/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dependencies": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/test-exclude/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/test-exclude/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/test-exclude/node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/test-exclude/node_modules/read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dependencies": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==" - }, - "node_modules/tiny-invariant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/title-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", - "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==", - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-styles": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", - "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typestyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/typestyle/-/typestyle-2.3.0.tgz", - "integrity": "sha512-JZd1R5cWxRvwXzPAKVFsbxO/QjDkFeQlqGF6ZxR7IREEXyFQrf1f1mmlx5EynOTItLLx4aBbcVpCH+CDsl5ZTw==", - "dependencies": { - "csstype": "3.0.10", - "free-style": "3.1.0" - } - }, - "node_modules/typestyle/node_modules/csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" - }, - "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" - }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==" - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unist-builder": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz", - "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", - "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", - "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", - "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", - "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-loader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", - "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", - "dependencies": { - "loader-utils": "^1.2.3", - "mime": "^2.4.4", - "schema-utils": "^2.5.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dependencies": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uvu": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.3.tgz", - "integrity": "sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uvu/node_modules/kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/vfile": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", - "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dependencies": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/webpack": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", - "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", - "dependencies": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-dev-server/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-log/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/webpack-manifest-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", - "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", - "dependencies": { - "fs-extra": "^7.0.0", - "lodash": ">=3.5 <5", - "object.entries": "^1.1.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.11.5" - }, - "peerDependencies": { - "webpack": "2 || 3 || 4" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/webpack/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha512-oBx6ZM1Gs5q2jwZuSN/Qxyy/fbgomV8+vqsmipaPKB/74hjHlKuM07jNmRhn4qa2AdUwsgxrltq+gaPsHgcl0Q==", - "dependencies": { - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "node_modules/whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-background-sync": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", - "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", - "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/workbox-build": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", - "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", - "dependencies": { - "@babel/runtime": "^7.3.4", - "@hapi/joi": "^15.0.0", - "common-tags": "^1.8.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.3", - "lodash.template": "^4.4.0", - "pretty-bytes": "^5.1.0", - "stringify-object": "^3.3.0", - "strip-comments": "^1.0.2", - "workbox-background-sync": "^4.3.1", - "workbox-broadcast-update": "^4.3.1", - "workbox-cacheable-response": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-expiration": "^4.3.1", - "workbox-google-analytics": "^4.3.1", - "workbox-navigation-preload": "^4.3.1", - "workbox-precaching": "^4.3.1", - "workbox-range-requests": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1", - "workbox-streams": "^4.3.1", - "workbox-sw": "^4.3.1", - "workbox-window": "^4.3.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/workbox-build/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", - "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/workbox-core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", - "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" - }, - "node_modules/workbox-expiration": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", - "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/workbox-google-analytics": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", - "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", - "dependencies": { - "workbox-background-sync": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", - "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/workbox-precaching": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", - "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/workbox-range-requests": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", - "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/workbox-routing": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", - "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/workbox-strategies": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", - "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/workbox-streams": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", - "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/workbox-sw": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", - "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" - }, - "node_modules/workbox-webpack-plugin": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", - "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "json-stable-stringify": "^1.0.1", - "workbox-build": "^4.3.1" - }, - "engines": { - "node": ">=4.0.0" - }, - "peerDependencies": { - "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" - } - }, - "node_modules/workbox-window": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", - "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", - "dependencies": { - "workbox-core": "^4.3.1" - } - }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dependencies": { - "errno": "~0.1.7" - } - }, - "node_modules/worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "dependencies": { - "microevent.ts": "~0.1.1" - } - }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/ws": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", - "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/xregexp": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.4.1.tgz", - "integrity": "sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==", - "dependencies": { - "@babel/runtime-corejs3": "^7.12.1" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "dependencies": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - }, - "bin": { - "json2yaml": "bin/json2yaml", - "yaml2json": "bin/yaml2json" - } - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz", - "integrity": "sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==" - }, - "@babel/core": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz", - "integrity": "sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.2", - "@babel/parser": "^7.18.5", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.5", - "@babel/types": "^7.18.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", - "requires": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz", - "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", - "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz", - "integrity": "sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", - "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", - "requires": { - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz", - "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==", - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", - "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - } - }, - "@babel/helper-replace-supers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", - "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - } - }, - "@babel/helper-simple-access": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", - "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", - "requires": { - "@babel/types": "^7.18.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" - }, - "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", - "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - } - }, - "@babel/helpers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz", - "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - } - }, - "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", - "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz", - "integrity": "sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz", - "integrity": "sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.17.12" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz", - "integrity": "sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", - "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz", - "integrity": "sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz", - "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-decorators": "^7.8.3" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", - "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz", - "integrity": "sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", - "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", - "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz", - "integrity": "sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.17.12" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", - "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", - "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", - "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz", - "integrity": "sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz", - "integrity": "sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.17.12.tgz", - "integrity": "sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz", - "integrity": "sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", - "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz", - "integrity": "sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz", - "integrity": "sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-remap-async-to-generator": "^7.16.8" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz", - "integrity": "sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz", - "integrity": "sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz", - "integrity": "sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz", - "integrity": "sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz", - "integrity": "sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz", - "integrity": "sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-flow": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz", - "integrity": "sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz", - "integrity": "sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz", - "integrity": "sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA==", - "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz", - "integrity": "sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q==", - "requires": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz", - "integrity": "sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA==", - "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz", - "integrity": "sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz", - "integrity": "sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz", - "integrity": "sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.12.tgz", - "integrity": "sha512-maEkX2xs2STuv2Px8QuqxqjhV2LsFobT1elCgyU5704fcyTu9DyD/bJXxD/mrRiVyhpHweOQ00OJ5FKhHq9oEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", - "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/types": "^7.17.12" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.16.7" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.17.12.tgz", - "integrity": "sha512-7S9G2B44EnYOx74mue02t1uD8ckWZ/ee6Uz/qfdzc35uWHX5NgRy9i+iJSb2LFRgMd+QV9zNcStQaazzzZ3n3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", - "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.0.tgz", - "integrity": "sha512-6+0IK6ouvqDn9bmEG7mEyF/pwlJXVj5lwydybpyyH3D0A7Hftk+NCTdYjnLNZksn261xaOV5ksmp20pQEmc2RQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz", - "integrity": "sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz", - "integrity": "sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", - "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "resolve": "^1.8.1", - "semver": "^5.5.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz", - "integrity": "sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz", - "integrity": "sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz", - "integrity": "sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", - "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-typescript": "^7.17.12" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/preset-env": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz", - "integrity": "sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.18.2", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-async-generator-functions": "^7.17.12", - "@babel/plugin-proposal-class-properties": "^7.17.12", - "@babel/plugin-proposal-class-static-block": "^7.18.0", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.17.12", - "@babel/plugin-proposal-json-strings": "^7.17.12", - "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.18.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.17.12", - "@babel/plugin-proposal-private-methods": "^7.17.12", - "@babel/plugin-proposal-private-property-in-object": "^7.17.12", - "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.17.12", - "@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/plugin-transform-arrow-functions": "^7.17.12", - "@babel/plugin-transform-async-to-generator": "^7.17.12", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.17.12", - "@babel/plugin-transform-classes": "^7.17.12", - "@babel/plugin-transform-computed-properties": "^7.17.12", - "@babel/plugin-transform-destructuring": "^7.18.0", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.17.12", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.18.1", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.17.12", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.18.0", - "@babel/plugin-transform-modules-commonjs": "^7.18.2", - "@babel/plugin-transform-modules-systemjs": "^7.18.0", - "@babel/plugin-transform-modules-umd": "^7.18.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", - "@babel/plugin-transform-new-target": "^7.17.12", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.17.12", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.18.0", - "@babel/plugin-transform-reserved-words": "^7.17.12", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.17.12", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.18.2", - "@babel/plugin-transform-typeof-symbol": "^7.17.12", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.2", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.17.12.tgz", - "integrity": "sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA==", - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.17.12", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" - } - }, - "@babel/preset-typescript": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz", - "integrity": "sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-typescript": "^7.9.0" - } - }, - "@babel/runtime": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz", - "integrity": "sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q==", - "requires": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.18.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", - "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", - "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" - }, - "@csstools/normalize.css": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", - "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" - }, - "@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "requires": { - "@emotion/memoize": "0.7.4" - } - }, - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" - }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" - }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" - }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" - } - }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "requires": { - "@hapi/hoek": "^8.3.0" - } - }, - "@hypnosphi/create-react-context": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz", - "integrity": "sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A==", - "requires": { - "gud": "^1.0.0", - "warning": "^4.0.3" - } - }, - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@jest/schemas": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", - "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", - "requires": { - "@sinclair/typebox": "^0.23.3" - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - } - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - } - }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", - "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@material-ui/core": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-3.9.4.tgz", - "integrity": "sha512-r8QFLSexcYZbnqy/Hn4v8xzmAJV41yaodUVjmbGLi1iGDLG3+W941hEtEiBmxTRRqv2BdK3r4ijILcqKmDv/Sw==", - "requires": { - "@babel/runtime": "^7.2.0", - "@material-ui/system": "^3.0.0-alpha.0", - "@material-ui/utils": "^3.0.0-alpha.2", - "@types/jss": "^9.5.6", - "@types/react-transition-group": "^2.0.8", - "brcast": "^3.0.1", - "classnames": "^2.2.5", - "csstype": "^2.5.2", - "debounce": "^1.1.0", - "deepmerge": "^3.0.0", - "dom-helpers": "^3.2.1", - "hoist-non-react-statics": "^3.2.1", - "is-plain-object": "^2.0.4", - "jss": "^9.8.7", - "jss-camel-case": "^6.0.0", - "jss-default-unit": "^8.0.2", - "jss-global": "^3.0.0", - "jss-nested": "^6.0.1", - "jss-props-sort": "^6.0.0", - "jss-vendor-prefixer": "^7.0.0", - "normalize-scroll-left": "^0.1.2", - "popper.js": "^1.14.1", - "prop-types": "^15.6.0", - "react-event-listener": "^0.6.2", - "react-transition-group": "^2.2.1", - "recompose": "0.28.0 - 0.30.0", - "warning": "^4.0.1" - }, - "dependencies": { - "deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" - } - } - }, - "@material-ui/icons": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-3.0.2.tgz", - "integrity": "sha512-QY/3gJnObZQ3O/e6WjH+0ah2M3MOgLOzCy8HTUoUx9B6dDrS18vP7Ycw3qrDEKlB6q1KNxy6CZHm5FCauWGy2g==", - "requires": { - "@babel/runtime": "^7.2.0", - "recompose": "0.28.0 - 0.30.0" - } - }, - "@material-ui/system": { - "version": "3.0.0-alpha.2", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-3.0.0-alpha.2.tgz", - "integrity": "sha512-odmxQ0peKpP7RQBQ8koly06YhsPzcoVib1vByVPBH4QhwqBXuYoqlCjt02846fYspAqkrWzjxnWUD311EBbxOA==", - "requires": { - "@babel/runtime": "^7.2.0", - "deepmerge": "^3.0.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" - }, - "dependencies": { - "deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==" - } - } - }, - "@material-ui/utils": { - "version": "3.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-3.0.0-alpha.3.tgz", - "integrity": "sha512-rwMdMZptX0DivkqBuC+Jdq7BYTXwqKai5G5ejPpuEDKpWzi1Oxp+LygGw329FrKpuKeiqpcymlqJTjmy+quWng==", - "requires": { - "@babel/runtime": "^7.2.0", - "prop-types": "^15.6.0", - "react-is": "^16.6.3" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" - }, - "@sinclair/typebox": { - "version": "0.23.5", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", - "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==" - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", - "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz", - "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz", - "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz", - "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz", - "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz", - "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz", - "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz", - "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" - }, - "@svgr/babel-preset": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz", - "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", - "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3", - "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", - "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", - "@svgr/babel-plugin-transform-svg-component": "^4.2.0" - } - }, - "@svgr/core": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz", - "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==", - "requires": { - "@svgr/plugin-jsx": "^4.3.3", - "camelcase": "^5.3.1", - "cosmiconfig": "^5.2.1" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz", - "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==", - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@svgr/plugin-jsx": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz", - "integrity": "sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w==", - "requires": { - "@babel/core": "^7.4.5", - "@svgr/babel-preset": "^4.3.3", - "@svgr/hast-util-to-babel-ast": "^4.3.2", - "svg-parser": "^2.0.0" - } - }, - "@svgr/plugin-svgo": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz", - "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==", - "requires": { - "cosmiconfig": "^5.2.1", - "merge-deep": "^3.0.2", - "svgo": "^1.2.2" - } - }, - "@svgr/webpack": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.3.tgz", - "integrity": "sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg==", - "requires": { - "@babel/core": "^7.4.5", - "@babel/plugin-transform-react-constant-elements": "^7.0.0", - "@babel/preset-env": "^7.4.5", - "@babel/preset-react": "^7.0.0", - "@svgr/core": "^4.3.3", - "@svgr/plugin-jsx": "^4.3.3", - "@svgr/plugin-svgo": "^4.3.1", - "loader-utils": "^1.2.3" - } - }, - "@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/dagre": { - "version": "https://registry.npmjs.org/@types/dagre/-/dagre-0.7.40.tgz", - "integrity": "sha512-XvaIdpHNW4AeyvPpKuvdpN8yn4RZBztPhJtLeHRtspCNUcgrZn/B9lA0KMIUlyVdIH77f82KzErR+H/ayrnoyQ==" - }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "requires": { - "@types/ms": "*" - } - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "requires": { - "@types/unist": "*" - } - }, - "@types/history": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/history/-/history-5.0.0.tgz", - "integrity": "sha512-hy8b7Y1J8OGe6LbAjj3xniQrj3v6lsivCcrmf4TzSgPzLkhIeKgc5IZnT7ReIqmEuodjfO8EYAuoFvIrHi/+jQ==", - "requires": { - "history": "*" - } - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.0.11", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.11.tgz", - "integrity": "sha512-2kLuPC5FDnWIDvaJBzsGTBQaBbnDweznicvK7UGYzlIJP4RJR2a4A/ByLUXEyEgag6jz8eHdlWExGDtH3EYUXQ==", - "requires": { - "@types/jest-diff": "*" - } - }, - "@types/jest-diff": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-24.3.0.tgz", - "integrity": "sha512-vx1CRDeDUwQ0Pc7v+hS61O1ETA81kD04IMEC0hS1kPyVtHDdZrokAvpF7MT9VI/fVSzicelUZNCepDvhRV1PeA==", - "requires": { - "jest-diff": "*" - } - }, - "@types/js-cookie": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", - "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==" - }, - "@types/js-yaml": { - "version": "3.12.7", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.7.tgz", - "integrity": "sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==" - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/jss": { - "version": "9.5.8", - "resolved": "https://registry.npmjs.org/@types/jss/-/jss-9.5.8.tgz", - "integrity": "sha512-bBbHvjhm42UKki+wZpR89j73ykSXg99/bhuKuYYePtpma3ZAnmeGnl0WxXiZhPGsIfzKwCUkpPC0jlrVMBfRxA==", - "requires": { - "csstype": "^2.0.0", - "indefinite-observable": "^1.0.1" - } - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "requires": { - "@types/unist": "*" - } - }, - "@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "14.18.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", - "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "@types/react": { - "version": "16.8.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.7.tgz", - "integrity": "sha512-0xbkIyrDNKUn4IJVf8JaCn+ucao/cq6ZB8O6kSzhrJub1cVSqgTArtG0qCfdERWKMEIvUbrwLXeQMqWEsyr9dA==", - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - }, - "@types/react-dom": { - "version": "16.8.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.2.tgz", - "integrity": "sha512-MX7n1wq3G/De15RGAAqnmidzhr2Y9O/ClxPxyqaNg96pGyeXUYPSvujgzEVpLo9oIP4Wn1UETl+rxTN02KEpBw==", - "requires": { - "@types/react": "*" - } - }, - "@types/react-gtm-module": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/react-gtm-module/-/react-gtm-module-2.0.1.tgz", - "integrity": "sha512-T/DN9gAbCYk5wJ1nxf4pSwmXz4d1iVjM++OoG+mwMfz9STMAotGjSb65gJHOS5bPvl6vLSsJnuC+y/43OQrltg==" - }, - "@types/react-native": { - "version": "0.67.8", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.67.8.tgz", - "integrity": "sha512-xA8rYiTHvO6RoZv/LFnmEeqRuhA2y34mGB8zX3bGHe/pCt9jEStUPyUO4q1KcDc9GiGIOBD8ArfRtThprAjSfQ==", - "requires": { - "@types/react": "*" - } - }, - "@types/react-router": { - "version": "5.1.18", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.18.tgz", - "integrity": "sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - }, - "dependencies": { - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - } - } - }, - "@types/react-router-dom": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-4.3.5.tgz", - "integrity": "sha512-eFajSUASYbPHg2BDM1G8Btx+YqGgvROPIg6sBhl3O4kbDdYXdFdfrgQFf/pcBuQVObjfT9AL/dd15jilR5DIEA==", - "requires": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-sidebar": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/react-sidebar/-/react-sidebar-3.0.2.tgz", - "integrity": "sha512-6ABhGhwv78nZVcHntCkq3ky7qOzKttyfhmEletO0BMkBUVl1+TlJMr6ficypIS8B+lSojLTnM+tQeydtMRRciQ==", - "requires": { - "@types/react": "*" - } - }, - "@types/react-transition-group": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-2.9.2.tgz", - "integrity": "sha512-5Fv2DQNO+GpdPZcxp2x/OQG/H19A01WlmpjVD9cKvVFmoVLOZ9LvBgSWG6pSXIU4og5fgbvGPaCV5+VGkWAEHA==", - "requires": { - "@types/react": "*" - } - }, - "@types/reactstrap": { - "version": "8.7.2", - "resolved": "https://registry.npmjs.org/@types/reactstrap/-/reactstrap-8.7.2.tgz", - "integrity": "sha512-8sYGS/LhG+ic8vhLwxhuVn+TSqS1lKzplm9BHv4JaQoetStAi9uOqP2VREfefIRT3JnOq5Y+G7Afdryvn+UgZQ==", - "requires": { - "reactstrap": "*" - } - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" - }, - "@types/styled-components": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-4.4.3.tgz", - "integrity": "sha512-U0udeNOZBfUkJycmGJwmzun0FBt11rZy08weVQmE2xfUNAbX8AGOEWxWna2d+qAUKxKgMlcG+TZT0+K2FfDcnQ==", - "requires": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "@types/react-native": "*", - "csstype": "^2.2.0" - } - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "@types/yargs": { - "version": "13.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", - "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "requires": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", - "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", - "requires": { - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" - }, - "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" - } - } - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" - }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" - }, - "adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "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-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "requires": {} - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==" - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", - "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==" - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" - }, - "array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" - } - } - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, - "babel-extract-comments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", - "requires": { - "babylon": "^6.18.0" - } - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@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" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@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" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - } - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "requires": {} - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - } - }, - "babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha512-C4Aq+GaAj83pRQ0EFgTvw5YO6T3Qz2KGrNRwIj9mSoNHVvdZY4KO2uA6HNtNXCw993iSZnckY1aLW8nOi8i4+w==" - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha512-ocgA9VJvyxwt+qJB0ncxV8kb/CjfTcECUY4tQ5VT7nP6Aohzobm8CDFaQ5FHdvZQzLmf0sgDxB8iRXZXxwZcyA==", - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - } - }, - "babel-preset-react-app": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.1.2.tgz", - "integrity": "sha512-k58RtQOKH21NyKtzptoAvtAODuAJJs3ZhqBMl456/GnXEQ/0La92pNmwgWoMn5pBTrsvk3YYXdY7zpY4e3UIxA==", - "requires": { - "@babel/core": "7.9.0", - "@babel/plugin-proposal-class-properties": "7.8.3", - "@babel/plugin-proposal-decorators": "7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.8.3", - "@babel/plugin-proposal-numeric-separator": "7.8.3", - "@babel/plugin-proposal-optional-chaining": "7.9.0", - "@babel/plugin-transform-flow-strip-types": "7.9.0", - "@babel/plugin-transform-react-display-name": "7.8.3", - "@babel/plugin-transform-runtime": "7.9.0", - "@babel/preset-env": "7.9.0", - "@babel/preset-react": "7.9.1", - "@babel/preset-typescript": "7.9.0", - "@babel/runtime": "7.9.0", - "babel-plugin-macros": "2.8.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24" - }, - "dependencies": { - "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", - "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", - "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", - "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz", - "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/preset-env": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", - "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", - "requires": { - "@babel/compat-data": "^7.9.0", - "@babel/helper-compilation-targets": "^7.8.7", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-numeric-separator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.9.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.8.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.9.0", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.8.3", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.9.0", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.9.0", - "@babel/plugin-transform-modules-commonjs": "^7.9.0", - "@babel/plugin-transform-modules-systemjs": "^7.9.0", - "@babel/plugin-transform-modules-umd": "^7.9.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.7", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.7", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.9.0", - "browserslist": "^4.9.1", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/preset-react": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.1.tgz", - "integrity": "sha512-aJBYF23MPj0RNdp/4bHnAP0NVqqZRr9kl0NAOP4nJCex6OYVio59+dnQzsAWFuogdLyeaKA1hmfUIVZkY5J+TQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.9.1", - "@babel/plugin-transform-react-jsx-development": "^7.9.0", - "@babel/plugin-transform-react-jsx-self": "^7.9.0", - "@babel/plugin-transform-react-jsx-source": "^7.9.0" - } - }, - "@babel/runtime": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.0.tgz", - "integrity": "sha512-cTIudHnzuWLS56ik4DnRnqqNf8MkdUzV4iFFI1h7Jo9xvrpQROYaAnaSd2mHLQAzzZAPfATynX5ord6YlNYNMA==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "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.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "brcast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/brcast/-/brcast-3.0.2.tgz", - "integrity": "sha512-f5XwwFCCuvgqP2nMH/hJ74FqnGmb4X3D+NC//HphxJzzhsZvSZa+Hk/syB7j3ZHpPDLMoYU8oBgviRWfNvEfKA==" - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.20.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz", - "integrity": "sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw==", - "requires": { - "caniuse-lite": "^1.0.30001349", - "electron-to-chromium": "^1.4.147", - "escalade": "^3.1.1", - "node-releases": "^2.0.5", - "picocolors": "^1.0.0" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - } - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "cacache": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", - "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", - "requires": { - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^7.0.0", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==" - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001352", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001352.tgz", - "integrity": "sha512-GUgH8w6YergqPQDGWhJGt8GDRnY0L/iJVQcU3eJ46GYf52R8tk0Wxp0PymuFVZboJYXGiCqwozAYZNRjVj6IcA==" - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "requires": { - "rsvp": "^4.8.4" - } - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", - "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "change-emitter": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz", - "integrity": "sha512-YXzt1cQ4a2jqazhcuSWEOc1K2q8g9H6eWNsyZgi640LDzRWVQ2eDe+Y/kVdftH+vYdPF2rgDb3dLdpxE1jvAxw==" - }, - "character-entities": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.1.tgz", - "integrity": "sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==" - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.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" - }, - "dependencies": { - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - } - } - }, - "classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", - "requires": { - "for-own": "^0.1.3", - "is-plain-object": "^2.0.1", - "kind-of": "^3.0.2", - "lazy-cache": "^1.0.3", - "shallow-clone": "^0.1.2" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "codemirror": { - "version": "5.65.5", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.5.tgz", - "integrity": "sha512-HNyhvGLnYz5c+kIsB9QKVitiZUevha3ovbIYaQiGzKo7ECSL/elWD9RXt3JgNr0NdnyqE9/Rc/7uLfkJQL638w==" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "comma-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz", - "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==" - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==", - "requires": { - "arity-n": "^1.0.4" - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" - }, - "core-js": { - "version": "3.23.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.1.tgz", - "integrity": "sha512-wfMYHWi1WQjpgZNC9kAlN4ut04TM9fUTdi7CqIoTVM7yaiOUQTklOzfb+oWH3r9edQcT3F887swuVmxrV+CC8w==" - }, - "core-js-compat": { - "version": "3.23.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.1.tgz", - "integrity": "sha512-KeYrEc8t6FJsKYB2qnDwRHWaC0cJNaqlHfCpMe5q3j/W1nje3moib/txNklddLPCtGb+etcBIyJ8zuMa/LN5/A==", - "requires": { - "browserslist": "^4.20.4", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-js-pure": { - "version": "3.23.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.1.tgz", - "integrity": "sha512-3qNgf6TqI3U1uhuSYRzJZGfFd4T+YlbyVPl+jgRiKjdZopvG4keZQwWZDAWpu1UH9nCgTpUzIV3GFawC7cJsqg==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "requires": { - "postcss": "^7.0.5" - } - }, - "css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==" - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "css-loader": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", - "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" - } - }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "requires": { - "postcss": "^7.0.5" - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-to-react-native": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", - "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-vendor": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-0.3.8.tgz", - "integrity": "sha512-Vx/Vl3zsHj32Z+WTNzGjd2iSbSIJTYHMmyGUT2nzCjj0Xk4qLfwpQ8nF6TQ5oo3Cf0s/An3DTc7LclH1BkAXbQ==", - "requires": { - "is-in-browser": "^1.0.2" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==" - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==" - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - } - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "requires": { - "cssom": "0.3.x" - } - }, - "csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dagre": { - "version": "https://registry.npmjs.org/dagre/-/dagre-0.8.4.tgz", - "integrity": "sha512-Dj0csFDrWYKdavwROb9FccHfTC4fJbyF/oJdL9LNZJ8WUvl968P6PAKEriGqfbdArVJEmmfA+UyumgWEwcHU6A==", - "requires": { - "graphlib": "^2.1.7", - "lodash": "^4.17.4" - } - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "requires": { - "character-entities": "^2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==" - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==" - }, - "diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } - } - }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.154", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.154.tgz", - "integrity": "sha512-GbV9djOkrnj6xmW+YYVVEI3VCQnJ0pnSTu7TW2JyjKd5cakoiSaG5R4RbEtfaD92GsY10DzbU3GYRe+IOA9kqA==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "requires": { - "type-fest": "^0.8.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - } - } - }, - "eslint-config-react-app": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", - "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", - "requires": { - "confusing-browser-globals": "^1.0.9" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz", - "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==", - "requires": { - "fs-extra": "^8.1.0", - "loader-fs-cache": "^1.0.2", - "loader-utils": "^1.2.3", - "object-hash": "^2.0.1", - "schema-utils": "^2.6.1" - } - }, - "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" - } - } - }, - "eslint-plugin-flowtype": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz", - "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==", - "requires": { - "lodash": "^4.17.15" - } - }, - "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", - "requires": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.1", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.0", - "read-pkg-up": "^2.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", - "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", - "requires": { - "@babel/runtime": "^7.4.5", - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", - "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.2", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^7.0.2", - "has": "^1.0.3", - "jsx-ast-utils": "^2.2.1" - } - }, - "eslint-plugin-react": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz", - "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==", - "requires": { - "array-includes": "^3.1.1", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.2.3", - "object.entries": "^1.1.1", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.15.1", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.2", - "xregexp": "^4.3.0" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-plugin-react-hooks": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", - "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==", - "requires": {} - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "eventsource": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.2.tgz", - "integrity": "sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - } - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { - "bser": "2.1.1" - } - }, - "fbjs": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", - "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==" - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - } - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", - "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", - "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.5.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "filesize": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", - "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" - }, - "fork-ts-checker-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", - "requires": { - "babel-code-frame": "^6.22.0", - "chalk": "^2.4.1", - "chokidar": "^3.3.0", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "requires": { - "map-cache": "^0.2.2" - } - }, - "free-style": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/free-style/-/free-style-3.1.0.tgz", - "integrity": "sha512-vJujYSIyT30iDoaoeigNAxX4yB1RUrh+N2ZMhIElMr3BvCuGXOw7XNJMEEJkDUeamK2Rnb/IKFGKRKlTWIGRWA==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "fuzzysort": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-1.9.0.tgz", - "integrity": "sha512-MOxCT0qLTwLqmEwc7UtU045RKef7mc8Qz8eR4r2bLNEq9dy/c3ZKMEFp6IEst69otkQdFZ4FfgH2dmZD+ddX1g==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "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" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==" - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==" - } - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "requires": { - "lodash": "^4.17.15" - } - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==" - }, - "gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - } - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hast-util-has-property": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.0.tgz", - "integrity": "sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w==" - }, - "hast-util-heading-rank": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-2.1.0.tgz", - "integrity": "sha512-w+Rw20Q/iWp2Bcnr6uTrYU6/ftZLbHKhvc8nM26VIWpDqDMlku2iXUVTeOlsdoih/UKQhY7PHQ+vZ0Aqq8bxtQ==", - "requires": { - "@types/hast": "^2.0.0" - } - }, - "hast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-2.0.0.tgz", - "integrity": "sha512-02AQ3vLhuH3FisaMM+i/9sm4OXGSq1UhOOCpTLLQtHdL3tZt7qil69r8M8iDkZYyC0HCFylcYoP+8IO7ddta1A==", - "requires": { - "@types/hast": "^2.0.0" - } - }, - "hast-util-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", - "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==" - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "history": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", - "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", - "requires": { - "@babel/runtime": "^7.7.6" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==" - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==" - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - } - } - }, - "html-webpack-plugin": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", - "integrity": "sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==", - "requires": { - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" - }, - "hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "requires": { - "postcss": "^7.0.14" - } - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "immer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", - "requires": { - "resolve-from": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "indefinite-observable": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/indefinite-observable/-/indefinite-observable-1.0.2.tgz", - "integrity": "sha512-Mps0898zEduHyPhb7UCgNmfzlqNZknVmaFz5qzr0mm04YQ5FGLhAyK/dJ+NaRxGyR6juQXIxh5Ev0xx+qq0nYA==", - "requires": { - "symbol-observable": "1.2.0" - } - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==" - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==" - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "requires": { - "html-escaper": "^2.0.0" - } - }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - } - }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-diff": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", - "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-jsdom-fourteen": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-1.0.1.tgz", - "integrity": "sha512-DojMX1sY+at5Ep+O9yME34CdidZnO3/zfPh8UW+918C5fIZET5vCjfkegixmsi7AtdYfkr4bPlIzmWnlvQkP7Q==", - "requires": { - "@jest/environment": "^24.3.0", - "@jest/fake-timers": "^24.3.0", - "@jest/types": "^24.3.0", - "jest-mock": "^24.0.0", - "jest-util": "^24.0.0", - "jsdom": "^14.1.0" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" - }, - "jsdom": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", - "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", - "requires": { - "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", - "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.0", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.1.3", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", - "xml-name-validator": "^3.0.0" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - } - }, - "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==" - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "dependencies": { - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - } - } - }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - } - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "requires": {} - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - } - }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" - }, - "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-watch-typeahead": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz", - "integrity": "sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.1", - "jest-regex-util": "^24.9.0", - "jest-watcher": "^24.3.0", - "slash": "^3.0.0", - "string-length": "^3.1.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==", - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==" - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "jss": { - "version": "9.8.7", - "resolved": "https://registry.npmjs.org/jss/-/jss-9.8.7.tgz", - "integrity": "sha512-awj3XRZYxbrmmrx9LUSj5pXSUfm12m8xzi/VKeqI1ZwWBtQ0kVPTs3vYs32t4rFw83CgFDukA8wKzOE9sMQnoQ==", - "requires": { - "is-in-browser": "^1.1.3", - "symbol-observable": "^1.1.0", - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "jss-camel-case": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jss-camel-case/-/jss-camel-case-6.1.0.tgz", - "integrity": "sha512-HPF2Q7wmNW1t79mCqSeU2vdd/vFFGpkazwvfHMOhPlMgXrJDzdj9viA2SaHk9ZbD5pfL63a8ylp4++irYbbzMQ==", - "requires": { - "hyphenate-style-name": "^1.0.2" - } - }, - "jss-default-unit": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/jss-default-unit/-/jss-default-unit-8.0.2.tgz", - "integrity": "sha512-WxNHrF/18CdoAGw2H0FqOEvJdREXVXLazn7PQYU7V6/BWkCV0GkmWsppNiExdw8dP4TU1ma1dT9zBNJ95feLmg==", - "requires": {} - }, - "jss-global": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jss-global/-/jss-global-3.0.0.tgz", - "integrity": "sha512-wxYn7vL+TImyQYGAfdplg7yaxnPQ9RaXY/cIA8hawaVnmmWxDHzBK32u1y+RAvWboa3lW83ya3nVZ/C+jyjZ5Q==", - "requires": {} - }, - "jss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jss-nested/-/jss-nested-6.0.1.tgz", - "integrity": "sha512-rn964TralHOZxoyEgeq3hXY8hyuCElnvQoVrQwKHVmu55VRDd6IqExAx9be5HgK0yN/+hQdgAXQl/GUrBbbSTA==", - "requires": { - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==", - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, - "jss-props-sort": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/jss-props-sort/-/jss-props-sort-6.0.0.tgz", - "integrity": "sha512-E89UDcrphmI0LzmvYk25Hp4aE5ZBsXqMWlkFXS0EtPkunJkRr+WXdCNYbXbksIPnKlBenGB9OxzQY+mVc70S+g==", - "requires": {} - }, - "jss-vendor-prefixer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz", - "integrity": "sha512-Agd+FKmvsI0HLcYXkvy8GYOw3AAASBUpsmIRvVQheps+JWaN892uFOInTr0DRydwaD91vSSUCU4NssschvF7MA==", - "requires": { - "css-vendor": "^0.3.8" - } - }, - "jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", - "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==" - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "requires": { - "leven": "^3.1.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "requires": { - "error-ex": "^1.2.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } - } - }, - "loader-fs-cache": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", - "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", - "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==", - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==", - "requires": { - "find-up": "^1.0.0" - } - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "loglevel": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", - "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==" - }, - "longest-streak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", - "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "requires": { - "tmpl": "1.0.5" - } - }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-table": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz", - "integrity": "sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==" - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdast-util-definitions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz", - "integrity": "sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unist-util-visit": "^3.0.0" - }, - "dependencies": { - "unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - } - }, - "unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "mdast-util-find-and-replace": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.0.tgz", - "integrity": "sha512-bz8hUWkMX7UcasORORcyBEsTKJ+dBiFwRPrm43hHC9NMRylIMLbfO5rwfeCN+UtY4AAi7s8WqXftb9eX6ZsqCg==", - "requires": { - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" - } - } - }, - "mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - } - }, - "mdast-util-gfm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", - "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", - "requires": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-gfm-autolink-literal": "^1.0.0", - "mdast-util-gfm-footnote": "^1.0.0", - "mdast-util-gfm-strikethrough": "^1.0.0", - "mdast-util-gfm-table": "^1.0.0", - "mdast-util-gfm-task-list-item": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-gfm-autolink-literal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz", - "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==", - "requires": { - "@types/mdast": "^3.0.0", - "ccount": "^2.0.0", - "mdast-util-find-and-replace": "^2.0.0", - "micromark-util-character": "^1.0.0" - } - }, - "mdast-util-gfm-footnote": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz", - "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-util-normalize-identifier": "^1.0.0" - } - }, - "mdast-util-gfm-strikethrough": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.1.tgz", - "integrity": "sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - } - }, - "mdast-util-gfm-table": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.4.tgz", - "integrity": "sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==", - "requires": { - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.3.0" - } - }, - "mdast-util-gfm-task-list-item": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz", - "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0" - } - }, - "mdast-util-to-hast": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.1.1.tgz", - "integrity": "sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==", - "requires": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/mdurl": "^1.0.0", - "mdast-util-definitions": "^5.0.0", - "mdurl": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "unist-builder": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "mdast-util-to-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", - "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" - } - }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-anything": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-2.4.4.tgz", - "integrity": "sha512-l5XlriUDJKQT12bH+rVhAHjwIuXWdAIecGwsYjv2LJo+dA1AeRTmeQS+3QBpO6lEthBMDi2IUMpLC1yyRvGlwQ==", - "requires": { - "is-what": "^3.3.1" - } - }, - "merge-deep": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", - "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", - "requires": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "micromark": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", - "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", - "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==", - "requires": { - "micromark-extension-gfm-autolink-literal": "^1.0.0", - "micromark-extension-gfm-footnote": "^1.0.0", - "micromark-extension-gfm-strikethrough": "^1.0.0", - "micromark-extension-gfm-table": "^1.0.0", - "micromark-extension-gfm-tagfilter": "^1.0.0", - "micromark-extension-gfm-task-list-item": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-autolink-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz", - "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-footnote": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", - "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", - "requires": { - "micromark-core-commonmark": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-strikethrough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz", - "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-table": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz", - "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-gfm-tagfilter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz", - "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==", - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-gfm-task-list-item": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz", - "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==" - }, - "micromark-util-html-tag-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", - "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==" - }, - "micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", - "requires": { - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-util-sanitize-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", - "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==" - }, - "micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mini-css-extract-plugin": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", - "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "requires": { - "minipass": "^3.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "nan": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", - "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - } - } - }, - "node-notifier": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.5.tgz", - "integrity": "sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==", - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" - }, - "normalize-scroll-left": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz", - "integrity": "sha512-F9YMRls0zCF6BFIE2YnXDRpHPpfd91nOIaNdDgrx5YMoPLo8Wqj+6jNXHQsYBavJeXP4ww8HCt0xQAKc5qk2Fg==" - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "requires": { - "path-key": "^2.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==" - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - } - } - }, - "object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", - "requires": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - } - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", - "requires": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "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" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha512-J/e9xiZZQNrt+958FFzJ+auItsBGq+UrQ7nE89AUP7UOTtjHnkISANXLdayhVzh538UnLMCSlf13lFfRIAKQOA==", - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==" - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - } - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - } - } - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "requires": { - "ts-pnp": "^1.1.6" - } - }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==" - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - } - } - }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - } - }, - "postcss-browser-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", - "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", - "requires": { - "postcss": "^7" - } - }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "requires": { - "postcss": "^7.0.14" - } - }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "requires": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz", - "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-normalize": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz", - "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==", - "requires": { - "@csstools/normalize.css": "^10.1.0", - "browserslist": "^4.6.2", - "postcss": "^7.0.17", - "postcss-browser-comments": "^3.0.0", - "sanitize.css": "^10.0.0" - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "requires": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-safe-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", - "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==" - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" - }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "pretty-format": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", - "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", - "requires": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - }, - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "requires": { - "asap": "~2.0.6" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "property-information": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz", - "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==" - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==" - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "requires": { - "performance-now": "^2.1.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - } - } - }, - "react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-app-polyfill": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz", - "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==", - "requires": { - "core-js": "^3.5.0", - "object-assign": "^4.1.1", - "promise": "^8.0.3", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.3", - "whatwg-fetch": "^3.0.0" - } - }, - "react-codemirror2": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-codemirror2/-/react-codemirror2-5.1.0.tgz", - "integrity": "sha512-Cksbgbviuf2mJfMyrKmcu7ycK6zX/ukuQO8dvRZdFWqATf5joalhjFc6etnBdGCcPA2LbhIwz+OPnQxLN/j1Fw==", - "requires": {} - }, - "react-dev-utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", - "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", - "requires": { - "@babel/code-frame": "7.8.3", - "address": "1.1.2", - "browserslist": "4.10.0", - "chalk": "2.4.2", - "cross-spawn": "7.0.1", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.0.1", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "3.1.1", - "global-modules": "2.0.0", - "globby": "8.0.2", - "gzip-size": "5.1.1", - "immer": "1.10.0", - "inquirer": "7.0.4", - "is-root": "2.1.0", - "loader-utils": "1.2.3", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "react-error-overlay": "^6.0.7", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "browserslist": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", - "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", - "requires": { - "caniuse-lite": "^1.0.30001035", - "electron-to-chromium": "^1.3.378", - "node-releases": "^1.1.52", - "pkg-up": "^3.1.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==" - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.2.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==" - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - } - }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "react-event-listener": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.6.tgz", - "integrity": "sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==", - "requires": { - "@babel/runtime": "^7.2.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" - } - }, - "react-gtm-module": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/react-gtm-module/-/react-gtm-module-2.0.11.tgz", - "integrity": "sha512-8gyj4TTxeP7eEyc2QKawEuQoAZdjKvMY4pgWfycGmqGByhs17fR+zEBs0JUDq4US/l+vbTl+6zvUIx27iDo/Vw==" - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-markdown": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.3.tgz", - "integrity": "sha512-We36SfqaKoVNpN1QqsZwWSv/OZt5J15LNgTLWynwAN5b265hrQrsjMtlRNwUvS+YyR3yDM8HpTNc4pK9H/Gc0A==", - "requires": { - "@types/hast": "^2.0.0", - "@types/prop-types": "^15.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "prop-types": "^15.0.0", - "property-information": "^6.0.0", - "react-is": "^18.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.3.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "dependencies": { - "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==" - } - } - }, - "react-popper": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz", - "integrity": "sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg==", - "requires": { - "@babel/runtime": "^7.1.2", - "@hypnosphi/create-react-context": "^0.3.1", - "deep-equal": "^1.1.1", - "popper.js": "^1.14.4", - "prop-types": "^15.6.1", - "typed-styles": "^0.0.7", - "warning": "^4.0.2" - } - }, - "react-router": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", - "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", - "requires": { - "history": "^4.7.2", - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.1", - "warning": "^4.0.1" - }, - "dependencies": { - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "react-router-dom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", - "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", - "requires": { - "history": "^4.7.2", - "invariant": "^2.2.4", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.1", - "react-router": "^4.3.1", - "warning": "^4.0.1" - }, - "dependencies": { - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - } - } - }, - "react-scripts": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.4.tgz", - "integrity": "sha512-7J7GZyF/QvZkKAZLneiOIhHozvOMHey7hO9cdO9u68jjhGZlI8hDdOm6UyuHofn6Ajc9Uji5I6Psm/nKNuWdyw==", - "requires": { - "@babel/core": "7.9.0", - "@svgr/webpack": "4.3.3", - "@typescript-eslint/eslint-plugin": "^2.10.0", - "@typescript-eslint/parser": "^2.10.0", - "babel-eslint": "10.1.0", - "babel-jest": "^24.9.0", - "babel-loader": "8.1.0", - "babel-plugin-named-asset-import": "^0.3.6", - "babel-preset-react-app": "^9.1.2", - "camelcase": "^5.3.1", - "case-sensitive-paths-webpack-plugin": "2.3.0", - "css-loader": "3.4.2", - "dotenv": "8.2.0", - "dotenv-expand": "5.1.0", - "eslint": "^6.6.0", - "eslint-config-react-app": "^5.2.1", - "eslint-loader": "3.0.3", - "eslint-plugin-flowtype": "4.6.0", - "eslint-plugin-import": "2.20.1", - "eslint-plugin-jsx-a11y": "6.2.3", - "eslint-plugin-react": "7.19.0", - "eslint-plugin-react-hooks": "^1.6.1", - "file-loader": "4.3.0", - "fs-extra": "^8.1.0", - "fsevents": "2.1.2", - "html-webpack-plugin": "4.0.0-beta.11", - "identity-obj-proxy": "3.0.0", - "jest": "24.9.0", - "jest-environment-jsdom-fourteen": "1.0.1", - "jest-resolve": "24.9.0", - "jest-watch-typeahead": "0.4.2", - "mini-css-extract-plugin": "0.9.0", - "optimize-css-assets-webpack-plugin": "5.0.3", - "pnp-webpack-plugin": "1.6.4", - "postcss-flexbugs-fixes": "4.1.0", - "postcss-loader": "3.0.0", - "postcss-normalize": "8.0.1", - "postcss-preset-env": "6.7.0", - "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^1.0.6", - "react-dev-utils": "^10.2.1", - "resolve": "1.15.0", - "resolve-url-loader": "3.1.2", - "sass-loader": "8.0.2", - "semver": "6.3.0", - "style-loader": "0.23.1", - "terser-webpack-plugin": "2.3.8", - "ts-pnp": "1.1.6", - "url-loader": "2.3.0", - "webpack": "4.42.0", - "webpack-dev-server": "3.11.0", - "webpack-manifest-plugin": "2.2.0", - "workbox-webpack-plugin": "4.3.1" - }, - "dependencies": { - "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "react-sidebar": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/react-sidebar/-/react-sidebar-3.0.2.tgz", - "integrity": "sha512-LG/JO1cJvdRqSmUT+DOhJrml/b45/UqM9nm8emcgbJb5EKNegKCObZcrRqyzVix42VfFf0odytviAAFEYYTu1Q==", - "requires": { - "@babel/runtime": ">=7.0.0-beta.56", - "prop-types": "^15.6.2" - } - }, - "react-tooltip": { - "version": "4.2.21", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.2.21.tgz", - "integrity": "sha512-zSLprMymBDowknr0KVDiJ05IjZn9mQhhg4PRsqln0OZtURAJ1snt1xi5daZfagsh6vfsziZrc9pErPTDY1ACig==", - "requires": { - "prop-types": "^15.7.2", - "uuid": "^7.0.3" - } - }, - "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - }, - "reactjs-popup": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reactjs-popup/-/reactjs-popup-1.5.0.tgz", - "integrity": "sha512-9uoxUAcUomnNoBtdYXBmgsF4w46llsogE3tOvLb5IkR5MMrD6UZJK20ip9kDKXCYubSxNkdfQKqSb/c95rf/qA==", - "requires": {} - }, - "reactstrap": { - "version": "8.10.1", - "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-8.10.1.tgz", - "integrity": "sha512-StjLADa/12yMNjafrSs+UD7sZAGtKpLO9fZp++2Dj0IzJinqY7eQhXlM3nFf0q40YsIcLvQdFc9pKF8PF4f0Qg==", - "requires": { - "@babel/runtime": "^7.12.5", - "classnames": "^2.2.3", - "prop-types": "^15.5.8", - "react-popper": "^1.3.6", - "react-transition-group": "^3.0.0" - }, - "dependencies": { - "react-transition-group": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-3.0.0.tgz", - "integrity": "sha512-A9ojB/LWECbFj58SNfjK1X9aaAU+1olLS0DFSikvrr2KfMaiBELemHDa5dKNvcTk2t3gUtDL/PJpFrBKDfMpLg==", - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - } - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==", - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - }, - "dependencies": { - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==", - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==", - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "requires": { - "util.promisify": "^1.0.0" - } - }, - "recompose": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.30.0.tgz", - "integrity": "sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==", - "requires": { - "@babel/runtime": "^7.0.0", - "change-emitter": "^0.1.2", - "fbjs": "^0.8.1", - "hoist-non-react-statics": "^2.3.1", - "react-lifecycles-compat": "^3.0.2", - "symbol-observable": "^1.0.4" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - } - } - }, - "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "requires": { - "minimatch": "3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - }, - "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, - "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } - } - }, - "rehype-slug": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-5.0.1.tgz", - "integrity": "sha512-X5v3wV/meuOX9NFcGhJvUpEjIvQl2gDvjg3z40RVprYFt7q3th4qMmYLULiu3gXvbNX1ppx+oaa6JyY1W67pTA==", - "requires": { - "@types/hast": "^2.0.0", - "github-slugger": "^1.1.1", - "hast-util-has-property": "^2.0.0", - "hast-util-heading-rank": "^2.0.0", - "hast-util-to-string": "^2.0.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" - }, - "remark-gfm": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", - "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-gfm": "^2.0.0", - "micromark-extension-gfm": "^2.0.0", - "unified": "^10.0.0" - } - }, - "remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "remark-rehype": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", - "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", - "requires": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "resolve": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", - "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" - }, - "resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", - "requires": { - "adjust-sourcemap-loader": "3.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" - }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha512-eEjL8FdkdsxApd0yWVZgBGzfCQiT8yqSc2H1p4jpZpQdtz7ohETiDMoje5PlM8I9WgkqkreVxFUKYOiJdVWDXw==", - "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg==" - } - } - }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha512-W6V2fix7nCLUYX1v6eGPrBOZlc03/faqzP4sUxMAJMBMOPYhfV/RyLegTufn5gJKaOITyi+gvf0LXDZ9NzkHnQ==" - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==" - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==" - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "requires": { - "mri": "^1.1.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "sanitize.css": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz", - "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" - }, - "sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", - "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "dependencies": { - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "requires": { - "xmlchars": "^2.1.1" - } - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "selfsigned": { - "version": "1.10.14", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", - "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", - "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^2.0.1", - "lazy-cache": "^0.2.3", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", - "requires": { - "is-buffer": "^1.0.2" - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==" - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - } - }, - "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "space-separated-tokens": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz", - "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==" - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "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" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.1.tgz", - "integrity": "sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw==", - "requires": { - "figgy-pudding": "^3.5.1", - "minipass": "^3.1.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "stack-utils": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", - "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==" - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha512-Qka42GGrS8Mm3SZ+7cH8UXiIWI867/b/Z/feQSpQx/rbfB8UGknGEZVaUQMOUVj+soY6NpWAxily63HI1OckVQ==", - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - } - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - }, - "strip-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", - "requires": { - "babel-extract-comments": "^1.0.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", - "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "styled-components": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-4.4.1.tgz", - "integrity": "sha512-RNqj14kYzw++6Sr38n7197xG33ipEOktGElty4I70IKzQF1jzaD1U4xQ+Ny/i03UUhHlC5NWEO+d8olRCDji6g==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@emotion/is-prop-valid": "^0.8.1", - "@emotion/unitless": "^0.7.0", - "babel-plugin-styled-components": ">= 1", - "css-to-react-native": "^2.2.2", - "memoize-one": "^5.0.0", - "merge-anything": "^2.2.4", - "prop-types": "^15.5.4", - "react-is": "^16.6.0", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10", - "supports-color": "^5.5.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", - "requires": {} - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", - "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", - "requires": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.3.1", - "jest-worker": "^25.4.0", - "p-limit": "^2.3.0", - "schema-utils": "^2.6.6", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.6.12", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==" - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA==" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==" - }, - "tiny-invariant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "title-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-3.0.3.tgz", - "integrity": "sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==", - "requires": { - "tslib": "^2.0.3" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "requires": { - "punycode": "^2.1.0" - } - }, - "trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" - }, - "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-styles": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", - "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==" - }, - "typestyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/typestyle/-/typestyle-2.3.0.tgz", - "integrity": "sha512-JZd1R5cWxRvwXzPAKVFsbxO/QjDkFeQlqGF6ZxR7IREEXyFQrf1f1mmlx5EynOTItLLx4aBbcVpCH+CDsl5ZTw==", - "requires": { - "csstype": "3.0.10", - "free-style": "3.1.0" - }, - "dependencies": { - "csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" - } - } - }, - "ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==" - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" - }, - "unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - } - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==" - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unist-builder": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz", - "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-generated": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", - "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==" - }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-position": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", - "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-visit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", - "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" - } - }, - "unist-util-visit-parents": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", - "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" - } - } - }, - "url-loader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", - "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", - "requires": { - "loader-utils": "^1.2.3", - "mime": "^2.4.4", - "schema-utils": "^2.5.0" - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" - }, - "uvu": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.3.tgz", - "integrity": "sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==", - "requires": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "dependencies": { - "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==" - } - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - } - } - }, - "vfile": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", - "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - } - } - }, - "vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "requires": { - "makeerror": "1.0.12" - } - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "webpack": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", - "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "webpack-manifest-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", - "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", - "requires": { - "fs-extra": "^7.0.0", - "lodash": ">=3.5 <5", - "object.entries": "^1.1.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha512-oBx6ZM1Gs5q2jwZuSN/Qxyy/fbgomV8+vqsmipaPKB/74hjHlKuM07jNmRhn4qa2AdUwsgxrltq+gaPsHgcl0Q==", - "requires": { - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "workbox-background-sync": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", - "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-broadcast-update": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", - "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-build": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", - "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", - "requires": { - "@babel/runtime": "^7.3.4", - "@hapi/joi": "^15.0.0", - "common-tags": "^1.8.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.3", - "lodash.template": "^4.4.0", - "pretty-bytes": "^5.1.0", - "stringify-object": "^3.3.0", - "strip-comments": "^1.0.2", - "workbox-background-sync": "^4.3.1", - "workbox-broadcast-update": "^4.3.1", - "workbox-cacheable-response": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-expiration": "^4.3.1", - "workbox-google-analytics": "^4.3.1", - "workbox-navigation-preload": "^4.3.1", - "workbox-precaching": "^4.3.1", - "workbox-range-requests": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1", - "workbox-streams": "^4.3.1", - "workbox-sw": "^4.3.1", - "workbox-window": "^4.3.1" - }, - "dependencies": { - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "workbox-cacheable-response": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", - "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", - "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" - }, - "workbox-expiration": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", - "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-google-analytics": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", - "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", - "requires": { - "workbox-background-sync": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1" - } - }, - "workbox-navigation-preload": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", - "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-precaching": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", - "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-range-requests": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", - "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-routing": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", - "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-strategies": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", - "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-streams": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", - "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-sw": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", - "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" - }, - "workbox-webpack-plugin": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", - "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "json-stable-stringify": "^1.0.1", - "workbox-build": "^4.3.1" - } - }, - "workbox-window": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", - "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "requires": { - "errno": "~0.1.7" - } - }, - "worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "requires": { - "microevent.ts": "~0.1.1" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", - "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "xregexp": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.4.1.tgz", - "integrity": "sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==", - "requires": { - "@babel/runtime-corejs3": "^7.12.1" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==" - } - } -} diff --git a/dashboard/origin-mlx/package.json b/dashboard/origin-mlx/package.json deleted file mode 100644 index edfbf658..00000000 --- a/dashboard/origin-mlx/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "aiops-frontend", - "version": "0.1.0", - "private": true, - "homepage": "./", - "dependencies": { - "@material-ui/core": "^3.9.2", - "@material-ui/icons": "^3.0.2", - "@types/dagre": "https://registry.npmjs.org/@types/dagre/-/dagre-0.7.40.tgz", - "@types/jest": "24.0.11", - "@types/js-cookie": "^2.2.6", - "@types/js-yaml": "^3.12.0", - "@types/node": "^14.14.45", - "@types/react": "16.8.7", - "@types/react-dom": "16.8.2", - "@types/react-gtm-module": "^2.0.1", - "@types/react-router-dom": "^4.3.1", - "@types/react-sidebar": "^3.0.0", - "@types/reactstrap": "^8.5.0", - "@types/styled-components": "^4.1.16", - "codemirror": "^5.45.0", - "dagre": "https://registry.npmjs.org/dagre/-/dagre-0.8.4.tgz", - "deepmerge": "^4.0.0", - "fuzzysort": "^1.1.4", - "js-cookie": "^2.2.1", - "js-yaml": "^3.12.2", - "react": "^16.13.1", - "react-codemirror2": "^5.1.0", - "react-dom": "^16.13.1", - "react-gtm-module": "^2.0.11", - "react-markdown": "^8.0.0", - "react-router-dom": "^4.3.1", - "react-scripts": "^3.0.1", - "react-sidebar": "^3.0.2", - "react-tooltip": "^4.2.8", - "reactjs-popup": "^1.5.0", - "reactstrap": "^8.5.1", - "rehype-slug": "^5.0.1", - "remark-gfm": "^3.0.0", - "styled-components": "^4.3.1", - "title-case": "^3.0.3", - "typescript": "^3.5.2", - "typestyle": "^2.0.1", - "yamljs": "^0.3.0" - }, - "scripts": { - "start": "react-scripts start", - "start-dev": "HTTPS=false REACT_APP_BRAND= REACT_APP_API= REACT_APP_KFP= REACT_APP_NBVIEWER_API= REACT_APP_DISABLE_LOGIN= react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": "react-app" - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ] -} diff --git a/dashboard/origin-mlx/public/dashboard_lib.bundle.js b/dashboard/origin-mlx/public/dashboard_lib.bundle.js deleted file mode 100644 index e0a8044e..00000000 --- a/dashboard/origin-mlx/public/dashboard_lib.bundle.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.centraldashboard=t():e.centraldashboard=t()}(window,(function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=51)}({51:function(e,t,n){"use strict";n.r(t),n.d(t,"PARENT_CONNECTED_EVENT",(function(){return o})),n.d(t,"IFRAME_CONNECTED_EVENT",(function(){return r})),n.d(t,"NAMESPACE_SELECTED_EVENT",(function(){return i})),n.d(t,"MESSAGE",(function(){return s})),n.d(t,"CentralDashboardEventHandler",(function(){return c}));const o="parent-connected",r="iframe-connected",i="namespace-selected",s="message";const c=new class{constructor(){this.window=window,this.parent=window.parent,this._messageEventListener=null,this._onParentConnected=null,this._onNamespaceSelected=null}init(e,t=!1){const n=this.window.location!==this.parent.location;e(this,n),n?(this._messageEventListener=this._onMessageReceived.bind(this),this.window.addEventListener(s,this._messageEventListener),this.parent.postMessage({type:r},this.parent.origin)):t||fetch("/api/dashboard-settings").then(e=>e.json()).then(e=>{if(e.DASHBOARD_FORCE_IFRAME){const e=this.window.location.origin+this.window.location.href.replace(this.window.location.origin,"/_");this.window.location.replace(e)}}).catch(e=>console.error(e))}detach(){this._messageEventListener&&this.window.removeEventListener(s,this._messageEventListener)}set onParentConnected(e){"function"==typeof e&&(this._onParentConnected=e)}set onNamespaceSelected(e){"function"==typeof e&&(this._onNamespaceSelected=e)}_onMessageReceived(e){const{data:t}=e;switch(t.type){case o:this._onParentConnected&&this._onParentConnected(t);break;case i:this._onNamespaceSelected&&this._onNamespaceSelected(t.value)}}}}})})); -//# sourceMappingURL=dashboard_lib.bundle.js.map \ No newline at end of file diff --git a/dashboard/origin-mlx/public/dashboard_lib.bundle.js.map b/dashboard/origin-mlx/public/dashboard_lib.bundle.js.map deleted file mode 100644 index 0daff32f..00000000 --- a/dashboard/origin-mlx/public/dashboard_lib.bundle.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"dashboard_lib.bundle.js","sources":["webpack://centraldashboard/dashboard_lib.bundle.js"],"sourcesContent":["!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.centraldashboard=t():e.centraldashboard=t()}(window,(function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,\"a\",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=\"\",n(n.s=51)}({51:function(e,t,n){\"use strict\";n.r(t),n.d(t,\"PARENT_CONNECTED_EVENT\",(function(){return o})),n.d(t,\"IFRAME_CONNECTED_EVENT\",(function(){return r})),n.d(t,\"NAMESPACE_SELECTED_EVENT\",(function(){return i})),n.d(t,\"MESSAGE\",(function(){return s})),n.d(t,\"CentralDashboardEventHandler\",(function(){return c}));const o=\"parent-connected\",r=\"iframe-connected\",i=\"namespace-selected\",s=\"message\";const c=new class{constructor(){this.window=window,this.parent=window.parent,this._messageEventListener=null,this._onParentConnected=null,this._onNamespaceSelected=null}init(e,t=!1){const n=this.window.location!==this.parent.location;e(this,n),n?(this._messageEventListener=this._onMessageReceived.bind(this),this.window.addEventListener(s,this._messageEventListener),this.parent.postMessage({type:r},this.parent.origin)):t||fetch(\"/api/dashboard-settings\").then(e=>e.json()).then(e=>{if(e.DASHBOARD_FORCE_IFRAME){const e=this.window.location.origin+this.window.location.href.replace(this.window.location.origin,\"/_\");this.window.location.replace(e)}}).catch(e=>console.error(e))}detach(){this._messageEventListener&&this.window.removeEventListener(s,this._messageEventListener)}set onParentConnected(e){\"function\"==typeof e&&(this._onParentConnected=e)}set onNamespaceSelected(e){\"function\"==typeof e&&(this._onNamespaceSelected=e)}_onMessageReceived(e){const{data:t}=e;switch(t.type){case o:this._onParentConnected&&this._onParentConnected(t);break;case i:this._onNamespaceSelected&&this._onNamespaceSelected(t.value)}}}}})}));"],"mappings":"AAAA","sourceRoot":""} \ No newline at end of file diff --git a/dashboard/origin-mlx/public/index.html b/dashboard/origin-mlx/public/index.html deleted file mode 100644 index f5f03658..00000000 --- a/dashboard/origin-mlx/public/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - MLX - - - -
- - - diff --git a/dashboard/origin-mlx/public/manifest.json b/dashboard/origin-mlx/public/manifest.json deleted file mode 100644 index a1d3d498..00000000 --- a/dashboard/origin-mlx/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "mlx-logo-white.png", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/dashboard/origin-mlx/public/mlx-logo-white.png b/dashboard/origin-mlx/public/mlx-logo-white.png deleted file mode 100644 index 7d5735f03073ee0277e0c44d6ac0747674d7083d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35255 zcmeEu^nNB5cf0G2hBZC$`u4+1S!0h(Qr@Oncs!bXeD4RosHkH3Zl1@;6SCFF>{^~ zlLh?6VUjauNB>5W6yEj;ljRvNNx)Z}st4P~_^LmGqxa^{ksdJZh51=3A!_N|{ke^_ z>yCWoOi`dgkg@wc1d0ay!AM|2i+aKIG!g^&@_!u+K|RKN;Uz?Ulah3!sHC5^3!@(2 zzNW-ReSgIP#sDyr{Ezv63j3dt{BL3W&l&vBd;WhMF)m9V5r9Ak1y)lol^3bqMilqr zh~w{E4e-X9rF;87F7uUKcU~I?Q}ZqcZq;Yl(rG#hm#^}EKh6VVR! zwK#O!m%yUTM5%JAvesa#x$s1v^Qm#u;F2~dg#{I&b%nmhYDnwW9RBbmbQhVP@xe2;~C__*JEhm^<=_M==PDiF(!yYhZ-wV$G zkv&(5nqZ}2`uQ1C5E5hw?FZs~7TAsCUG+N`+BO^wRQTsg5uopMIlQu8(IfbMhX?5G;2?@!j{MdA)ssXFG|Pa0;sjv7T0Ys)O20yZh%ABj zI-VI-GR7w;>@Z5bJeCMF!o>7%Y|p%}VjW2T`%{X=!XXa;G)OB_*#XK}GcY1^;jnZX z;3bJib>h87fP`HvQU-1O?Y}X1Hr4fr@cajy_$L%ZdZqCa{s*FrlA0ipRfXvPK{>id zh{oH3T>R*VS?~UJi43-qv5xpJ2GV`v;5lmo$Hr2j`PW0-lB7lRN7(+D{|3&X(e0CZ zj1lAiPop7an{%k%Gydzn3G0MCppXAPWwGyFr#<^G8y=?O;yLFz24+FPKgNJ`4WVaM zn3PHXd5W>(AAZ!<_OAuJ;18*)GB~`v|5`^EE3|uK`S3qaDq?73>uDVR0S^KATiz=^y)3}>5#qV|NHv{fH&M@nVv%{viT25y;8btK#R!gN zHmf;`HV9d;;9hA;Jk{m5cU};a%NlLN18GlD&l9piq7o{2hSVhx- zi|bIX!c=#<2+b`_2vCwMPbol$|BC-AVpte}!yTo7xvp0$1&* zBl@LCIXM}etiI{I1So??&BT-uc1<^Kw^T@sDtNma3Lp1QFqxBbSv+c{JftN0Xkrtf z!*V?0`mB?4%8DpeU}wuEl0?|*1kv&4pHNEyiakY^p0mMFLOD{l-QjwUF-X-^^d@8X zLra4Y)_(%~D4muCPoJ`%vV}=oxv}F8@DJ={2TX$915v7@jg+9UQ@7ut)qdaN_arFA~+sYuM6lF1#>fBDtH4yF}Y@ya^w*{P>^5N;~=h-e~lPKww@9hBTF2s07 zGRk+HSLeu^_$Q~sh1c5E@Y%;4sLLz^DPogr`5_CIw35)S$3yVJSjn>8zqqoz0FH2B=C2m`4&| z@Y@OElqqXnRhK;z@gMc1pfOyOAX#=7ZiJvDj&H@P#AeuWQl zHSsZx!?s54l8lXttm_tc4KJ06JyL!_s)m(dx4(a;gy}4cO~G{6Ao^h{;nSEgB>_Sc{noUR!!(bj!vc%| zT4vPBEQ@fGLAXhb!9=Np7Ot5OD0}8Yg*sW zjO;~+urdTw^;xR!X1<$tX8G;8DcYD`%S^|KvZd+JEK@hFS=KmSDQn91)tB&`)7V{F zF{AJQ;*}MpU`FVuC1v31a(dA##7w}xBr|HCDJ?pJPs5P*;F33O$|QYS#KoT8Sp^?8 z%|A~6c<0I#E>VZ_+6l|Q&?2=AMmf$uUXS8=Pn1&^d4tnBlH{&MM~P9?b9Ih2o=!h! z3*69imvKa{g}#bFT$Mt)|Mjdpy>fzvM)X9PQiyXI()xKC6h(^CTa+24kXyH>Q^9PR zmONQ=0_{WSb!Bm+kLo}~U$D*dE|eXWaUDlpopQ2&n$9e<)NUX4<=l{KfiH)ATCF*K zB&~xoq0jG6W$q1UN3$tr*~0P&-2EyG!gG!2Nmal9bGmeZ`RJX8LWx!^Og0R?xx-va zMD2LuEKkp=b{CZafG~cRQ;>*?ny%TnCX|V==(DG*l#|CPMu;{RlB(;-GkfkYxi3-E z=xWkE!@E<~AV#KVg%jcCWWF)}%knz!-xRw-%(NzcO^=!gp%1oW`#F zQ$f7u#B$T$hCSO79y>-s`?nn)3&W5pm)3aawvhTSI^R?tqqNxghx%o)kgN85cnljs zJR~)>aF#ml`29E3D0i&uIhIN)g$nqejCH5wzf9X0`jF!}9ZJxVJm-_5_Rmnmw(3k~ zMost!tV=pb39HauHRcE7M^=|^?o>EY@~?S??A*hKkKL>`6u0a0C>n#D#PV5|8{U@x zYXK>VWyxQ>0h7*n`E{OMq36t|23T_;>KL$_qEThs>0H zr@Fj}d|5if9A2A>%J2}nA6BS5l7EX%G1Q`WdA-NRuU*rz!cf3XWC_x|+prhq=KHv{ zd$?NV0m>qL_@}+aBMLOPi`3qNM-jvZ$G?aSwpb;^Du)BPqlEIJxMIu*j8QeGvy)= zMlFM^<3GYOe78GCbNT8oR9ebIIw`L&T-hzNUL51B4d;fRKM$-s973LB!u~mYwgI^v zCkr>{qUE#g?2d2eSa%S*Y{Xhn@+bL2KdtAY@bkkq(0@s>GBB9yqonQFg9o~!7Yhx8 zpZ*KI{Y>Plp&1xuC3Dl_7_ego`{y7KM!k?TjX#})z&>d>D=M(O-5BNu>FK&B$qxM+ z>n6J(V8MzK2o;R~NVkL`0pGev05it`Kz?WqBKd&Fg36y@5b1^i%i}}E)%h;CJLo_H zwo;IRQvKtdaO^ggV2Fk?3PeBu&;Y-lOU7EFfj7d%90Lo|QLaW!doSE=`2)rQ0c^!G z@ZTF9O|hHh&lm?^#Rd@>h(4=&g|gFkx-lU4$S7aSP(d&tBgNI= zJdvNUEyd$TQu@(9jz0!F3D_VGKxjCsE8|r#^s?b5;S`ik8LJ1T1&BbBZzf*8ltqcN zK8G=aaA0{>Py)adC_9R`8>G@b{C{#4{a`K0#GK7VjqU}abI$`*^&U*Ch;rJz zRYUtA#XmoBL2cRzB?^9G*C54)sBaHOX;FbHa!u0pH%1nq4$A~oA6_I=V2);l7*ty& z|9do;?M2HHNmQjH_>Vxr2?)p*GM{fH=l~>1KLfz{?uZ-o(u97>$1(w>nQqr9m-%Wp zw5*4Mc3B=MLvqYAdzeK4KY#g8!}Z#P$C3wjG4-eH!)q32>)$$>w>Ft+C64@3T?~YD zt`{?}+f-rzq^;CsQnlAwk_lu^D$0u!+;?}4F(ax~Y{`Di7w?`;Yt_}1*xom9%gnR) zrgkqL-QRuwF@?sFIE-0<(jJ4Lqw(A0BxUz%&EIDlW_r7tGV`jz&XpH;bXS;sj5I>h zDpY_{xix7-EE`Q3Y7cc9zP2{L!Kk&@0V5dH}f*^AYzDS$>^W1OrM1bmbBNt2is4G=w9>t z!6gLk{IOAxL)vaHCvP*v?WgrI_Ht@}t*3zmj&?M7SfHz$;J_cHddDjL;`_by!r`83 z&@iK0Ly}l6?gn%yqBu5+W(n?eSxvLF;F{#Hg&hd|;}iwFkd|g4pg9 zzlc1_tuVx80M&uKM{I!*`(|LK90ZNz#K^2w4LEh0a-mSIei&17?`Z?<7sdx^_+en0 ztz;30$1Ci2EH<{qBh4PU5P~q)B-Cue;haC@Av9=+ykFZI#?-05ID_gj>@6Lo9v&~- zvCNog(ZkpZ_27skOZUK1VavN+tH&T>e+><9Ur6pesAwd3PYmw>up;NzJlaT zCdmamCeF%$mNFUl-mUd7!KZXpv%zCHYf9B+gx2(O1d}4fKnpY0Hg|FOc6U6Jfg&Kw zuZ(u?6uPR*97W`lwd{`APBdg+(M3|G9wL`ASzqQSCluJwpk*;vx)Yl{L9|YY*O`qv zXw5|gWuzx@2vG*mVw%vFh=$YrA$7IXd(Gyy9){=tj*FtD)x*hagC5;g>yKwPQ-p9W z%*iT+7dkn(5?a;CFd>H^PBU}h1dWC%+`y@F7I>b}p2)LJwaSSHiVtjt}4N?Kg=t~7V#6-v8tZ7{B$ur6WX_fJU3A&l@?iexrz>krI{^IGcrT3_7 z#l%Yf03f(p#NJ!JX4_KFC5TX32@`VN_=R{6enNpxmipSHt#EsO7}L=srTg0P@%?ef z+0NWWy40~)H5I^E_H3>dCH9dF!WaH5xH3ZYyD9bJTtWoqS@{>~G0F_cP|nJ+`+(q1 zg!_H5e5(wlJOL)e=ut0P42G>jwW}{j zoc|Ftdprp*(yRPAGvr)C;F2lgaD5^0$}*4_N?QMWaY*^<6pgV^r|M@30%rkMDM|Q= zbpKM8ND4c(&Tpl~_Ll!-{GMnn=}p}U!mH**0KyztmIWf-E#wd`4K#Y7gXWhH?#3Ex z9^GDnK&iD*VZQlrT5Lg!DluY zA%_sy-CaG6%zZrII4RYn*Q`R14;r_Ya2JC${js%-sCH12PD}v0S54kqvfdVdGh^AJ zSM;b`HHJo+*DFt)5>)Vu-C6H}eSNKEyxkpR+L-N&;<&$rq-=hAyEdsax-`~YnIQ~% zi-UmiJWQa-SZq>nPAMgLf(2sh0p96juy(SrsO(Ir}peExjS7Vu55bjhqSwiOyr=$LR* z^&g`(p%qal6KaZvjNyS|)NFROy{*d0`yZ~mn!?Y<>~ddm3&mB>s|+EAFbQ1l7tzO_g8)qG>z>&m=e zAZgMbU6q;9r@Fi&LrHTLA1=VcLVUGb6<^mqPi2ph%) zWk9&#q`g?U(+~91_p(|BLzDE9!sm_esnVcIl=9F7AqR#g{=VB4ENsy9FBtA#=d14l zL#E}vKXvyM#_IC@5;hN`Oh^KBGMy^&Nm|ljce_L43;8T9bN78qluJ(<))McWNifx@KPq4f4S5#7z($i19bdry0UX!>L@zsJ$vo%S3qo@!M+z+1U; z5?+aHUDfFR_KczbkaNHT`I&!%8tzb!|p#{EzJ*JP$Z zif`5219H>R$kz~2*9X6QiUa!mshWSOu!}9ZVz~neMW$UW_`1?;ta@$JroM>WFvXh( zHUN&tg6~H9I&8n2EOsgmMWxb!Ec;*XjTm~)J@0(_O2ldHP9Va|bD}ttYcg=|RKq(EGDdqe~wVTaDWbe?C{7Q)10}y4Ot;Q?-`eVa~nvEE^%WM-LZ7Z?o=`(|Va?pr* zo6%=R7nbpH)K-rKKkojPDn=m#GG=NVegx}N)o8aG$YFU?<}LWuL9JKmq2Yu$o*JdR zoi`(z{|oQP@H)+)IvvjCd#Z&0TMO_f#9{mc+xbkrG!&gP=VN*Q;@bTu2mCU})ej)h zv$`*r(p*@OG3})L=U;Nscyb@y+G>2Q-eQ7587;71aA&_`NA`YA*Ff_h=l*CiOHIQ+ zDoP{a-E!swY*Ux?e2dFdz-F`}ssPaVabgoBgJ619*NO>wX{Y0I%)-8=i@(}f5PmBX zsL(s16SW_S!bIfFuv4si8l~KZCB+(foK3nnF4G3NU1(Z|4G$bwx8$N06;ar#q|h_0 zMxIt~^gvGo1Ii|69A zb$WBF%Pg+omZ2r>rEH68+jV0MY)3~k3LcO#V?@DCoz)Vi^2gsfbYy4z(ffbQWH%tB z+ZDhe1zxdUr|eI5L4DLmaPgAFo75a?nqU0|@9b9asOF5llc(u-AI*6>%*rwDOWH z66x{`?1(PnsNwCB1`Hg9>voFH7?lKQSCM7k*hK

pgU?+<>L1Gzb9wGgU9*d}_j@ zDp+hP_~s60wRcFNZ@-r)Q_`n@iFe5lWi1A`8dk(YU(?k>9AaAC;`bXwziuH=YOrnO z5&>yZ$=j_jkbsP_OW6rlppEdxN1ZY+7G7(EZ~QM=i`iF;=P2hYV_PkNHDPK;3o0uy zBX%>K(Mj#3g)I(+2Caxky9`0{?B{)&YUHqbUd@G0X9GDZM<=qp z`A8f3N^W?LKxl*F$KR|t*zb;QLSzsM8l5_bS9FGNj2+aLG3)|pciyJ5*Vi9GBliqW z7BcZxQp&9bc&{?UAmM;aZcbCCP%#^I~cGae>ZDR ztXBQ3F(nuBX??ij-#*9zSS!s2&PtX6w(5ksdY(N+>4snsGRs%4*1IV3nO4sW^?>EV zaGMUMS5s3ZnK)T*1;8;MKBB?7$h19-W>|3GPWZc`dwAi@K&Zp&&p+%huG^yP^4ht^ z{JxbBU??3<6)+11k-=+5t@ku7+jO!zog3TmRenx@et z*8MJz8v2BD<@x#0tkk&<@8HTl+nu+e$6o_xC&fe=L>N94qjypK&DnTGdC)e45A0_V z3Ik~L5N!AS8SuIcw-&yt(SNMpy*N78qx|f<9``Flch*!l)jneO8Prh)E-oq%t%Ptw*3x!ev+QGo)Fz*xe}7Nx+mB3 zadKw|Em_2S*{3RdK89i4^xU{cpK(|GpEMUU#fY8H4Y@U0KdGAd`A*^UdRgnXd%JXf zRbEBuT-`4!PmA&I<`AcSFID)QJHz|DQ{1vsX0*)pwbvVl>AHuLh&R7w9?9slM&?Q<_NTbHemoz~ zNw<1$Ml_H*Z$xdW?nl#c4dCO4u___jK(FVFzq)4ng5jv)$!OuLF9z3}eQ~M>Yz>qc&+8^?Mg>2! zjU2t%lHFzvXvSG-VTl=dU+A;~_?F>!M629L`cTj2sp>->eq=!i&8i=lxGmcsCc7-d zD&MEm5sZ6tO2PBF94<;}I@Qw8-?dOUl$1;r;m#I%0bOE2uOGQRXAP`dDR%uJP?z9? z=yr**f7BagL6Z6V53I%@H{j0=bt+}Ng@(7Jy8mIw!idGo2J1 z%OnBCCfR_svm=Qv5~{UAa5*=fOq}%z8!{robs&JS)Z!X`3VZQBT`TE3FLZYP^?~YG zh&PEc4HP%6IfxN@Hz*;nFbDozIpVO;vK}v-I6LPYe%Lo@bXUE4@ zpS7PHKgTVYK7J*yXQ?$bcdc!zmusg0aEgWh*+}D94DR;Y;c9zq5reVT48cQl~z=`+#4#0dDw4HR%DQBX230s^=DH6tiA;ihi zH@L0AB%Qx&<$~YnqJ={2u!ju4*YxUXerXzB5(cR~7x(~are7?n8TZ9OE?LRj_*G_L z#CvdR*gXwaN7G`Ep_Nr36XKizvJ-5du@)5uk1;J3zh?I{O)Bn{_NdOtz`RltvET%ELWO+AiJAoBt-6p zzbenQ+gI1OxZqMH7T+F90J^^_EW3ozr{zItWYVrj&~EY@v@m%yoMdP*F8{t^du~fP z$5A-6sX>f=5K@GVbaQm0pu@o5cuHSUe@_dXW@Ir~tbcfsrKWpt4WY87`n+x+BeXpr z0%e z&w{(nIt|Twoi|f|%yGySD6z{j&EmVTH)7BX-1$UsgTjTJbVoOwW_-PqenCL1TZ)Le zgcWh~go@TV%lD_F>?Ab8pdCBv4m+YWS*(gLsUMF;|LAF|-pM!Y)e%H^wnSvpMmH=_Y){nb)oIL()r!U5~k4Kah1Y|KuYy7Ge$ArSIkaiBZ*TAm6o?%xLFqpKBIYYVg>Zps9RJpl#Ck zd4ZW~ZT}hhp%|RYg$cmD{ykiokMH*o-ex3tnWPyxcp7M~>VK+RoSGN=Z80H259pj+ zfTA3b_^{#@au`=9ZHRLa`Ney#hcak|-r^JLY&^rYbaxH!xZpcmz?nw3 z>osFt%c3!wctm{_his&*zwM3gD1QAK=NJI9p!&@bxUcw7B{}Z1j=U#M8ykLxKs`)G zU%7XLD|2Yg7vo)Xu1}58I+?OV*J+Z6LdT>2Xz?|b*Xf{Zj`a>RR58&(mD$0`pUX@6 z=U~Wy95NHAd^**(Eq0=~Z|XmYS6r!Vz02qO-l8vWWBM>5dklO3=01ri@j0;FX&ckf zzTMvVAp0e(D!(Gy!+Y3%@=m8Bw_1wKc_;UWD|iBu=@ZEa|E~C-gAn(WOa9DwHL@q- zW_l4g^W4bHysDL5YqDWFypkC;g~lQnl!HUuHWt`$Em;l7Z8Hojlc4&vVg&T*vN3Ap z*aKOj2jmf8>TW+G{o=&=jQzUssH9Ys`8fVd*1mJ&E^Nbn+I4rh^@roeY@ z;&3+87@Gf`uOh2!aewZDu(6vARXKL>(nOyMkB3V^+#Hnz?%LFxPnt*h4HwHed^W32J(yR@}SKZcTDRT~~p#ELTHEy209^wQsp)&wVX1}SyiEb2Hw zWj`mP(B37HS&W4W8g!zMOL$4LsHQtvyP7(!tH!4^>iY5c_AXIQtL~a0RD)w8- zr4$#9X1GkP_Ve7r0@>e|NLc5L?w^?(H z-$Q|7zk8_MOJ<5mKxL|=Em%Itc^@8UG} zvHIhCAc3)tU>R~%`k2lnT{;*2K%;C@6Kv2fvhgr)_owG$<%0Wg+a0HdEQU8T+Xe`x zcZFzKpU1E$qU-mSM9DhAHYAn#KLhKwiYMRf1EY@TFmc;XD{67eR;)J83x*UC??t2c zrxC5N9G2EGuH89Pf!q(-wYGQEsRNo$nEH}@r&jYwIU9}gvj`9$?;bO&7T>-aQnJ-G*)V# zo+nGm9~vika<1@iq)gGLmW>w%D?YHk=K2lOEzs|%Q_#<{X+Udf#DitUQ#)umfnBo_)#H;CaUQG-}c}5#06SJ6I1kuQt*h9?)+E@tRTu20%72{r_mtOf=A$}SLank9ADhvtoG-L za&wvJo1n@%#wg{Ra91w=ctvngb~2G;wEMlQ;T7ZlI=QFn+gE38MgB~JZKQN|d$Z4a zj4PeMtbv;`rm^UgtkC(_5UN~0CF1j{DP2tyVv9gwc84XQr(YA;%gK{#i9DrsGUTc# za992g_ymhk3|oH7peVC4;j%r^1>?nuMv9Sl`Xo|0j+R;t&IM9i&d^M%GAs88#XEUH zZQMM_59#Qf%;he`fD|Wh4B=}oQx>?WP@1?5D%Zb?%AfAykfhmQ)9x2;?OcnWZoVP)9mRk`> z{V*vE@<$ttu%gEAjn%~;r8H_&b8aP3eKOMJ#s zmGx!>ldL)QrF(PlB|Wke1Mv~@Mh@Y#%^LV)_<>`WNMF)#;jZhhn46P|?Z#?t4V!<9qiUOMyTj!_=qT9<5P8~TPp7k;Tf?_ zzq1LNwn_{WxE6_^@-FEUh)iv88_ZyY(mq`6&lcq-D1kkoWRFZO2;WYZIVlqXL#kGi z7sJx&gr+lQ^M=ed3xh(=XM z#%7@)V_~*<8P=XgLA~d6#QY@}bAyavxm0I(>T1n?RXhm!H^{4FkbtCHQGA9r@)&n9 z|J@gI1M|BdBCK)RWz|=syi>e;ok56VE(#YRpo$^f;c3i(;U1Bpbs_Xox0&4+UL`QX zA>&f*myqJ%+bmUV$Z-Ml@->_~{n3=!LJo|b+o%*1@_3zTohCNFV{m_}lutNRQu~n^ zd>_SmkY?mQTONk?az{r_C`MMqUii!QXG9y}!VFvJD?0GFopvrl4{S3HK2@1|y>LZ{ z{>f@k{CArS8jdcMi)$_ zzi5&c;y^vj?`=Ej-i24(^tjhYj`+OZY@0g>=^n|;EmgZf!R~-`N~=Z`A*~rB2edO$ z9HOl2=)bgr#}7&q&3kW6pMJT{)Tbb?w9I?L5K%W(<-{&f7wKwqlnZuouf#Q!t-iuX zio3kske&m1n^>0<7 zDB3#E=rMzp@+w9A60TzWwUM9hx*U{G*F83`$sVJ$a@xRisRdU)x4nr^)Jvz(*fG4w zWHvz@JU;jYFb&g)Lxbvm)ikn~=-&Ca9`1FxaRCUS=;p~Vli?yZ+K85;fr>WeMpv4! zwVRo*zAGU=9MKRR_BbzY;?p}ytriPc+#Hz!xpN)PhJc~wFLVMncrs9=OEZvKcKq&S zM(g2jp+pd>Hp z<3d9T>86ZxUN!f@zB6&^Xpvu-@aQ(OO(h}oTq=G3^C17;32d$M$aMMK3w&iy#A9u) znikbzDXUv`UDoYh1WJZ9Tuu_fg{s4Dc!BnP+1yFDnW|7xw$`ou$6 zf6o26kWl%d{H8|_u%XG6Y!^Q6KQb$j04*N#-MzzE(|m#`#15bt%jvJRRL%q2BSlwD z?CGKWE#wAZl>n(qbywf3B&z&kI#B;PANv|NKmNOfb84X8{FW{rKd^3Sjk0?a*4u&D zD}1R0wv=@Al?HOs|7v)*4LdnY84SOG>q_Mow zS}?;50ZFt8xfFEfH!p}LpoLe-qDxPZAAY)EzYDcAOYdaiDv~OZz4l79S{pMM#Q7-B zP>tIm#X{0w&l0si<&Kk-OYK{Wf_vIy@{|^=V36g&Q*xdnW4qgZub+oPUtx_CnIS6o zzQYG!?_SPkQ;oFq+Fu0Drys{0%LX3fvY+_zJ$uRH^LdH!3x@4O+h-y<%#2)DgX0SLhoaBM)?B6+e(Mab2%-Nd#dd(w`&%6 za(~_64o&w=JWwelB_i2%uHmbHoaBWmzV{L)Po+HE`Y3NikH*H$I|H>#Do}<-V3{E5 z91%Jcj*g{KUd|(Y!<6sr!2*w7@Lz{Q`VnZLBfb%5=~iAlaoCD6zXc5WCUM(dj=%}| zIp_N~pAKO?Bsyr7x#zm_YyMHL8X0z~DxFXZ0JEqoh)neVU3M93k*_@WLj!&K)C~LU zySr|4WV{e+9H8Gk!0WBU4M!y;bYBYTV%6|{z4ph*w|y*PR0(IVyT5)hwspCFQ+xUd zBs~U4c5kuReQ@>I@^~y1Re6z_S?#Mvl|DqHo!^gLQwf85A)BIBc=w7N@gwcnagf}$ z>oH-H?8rR{0ZM_Xu>g*+y=OaOU;P%95BG(L zQy#A;FX-c~bVKaQABff0ZuS*8mLOov*X~s3?XXGtae2xOYUU|jL$ zniV2GCCP=~%MB|Y%fW3tzNJ!zx6-(gN$C5KSL&CppdB#I0$ntDWr zb!HFb_AwXwXf5qVSF$2MG&Xhla8ta7mhZHno4=?F&xZ4}9FW?ADvzlbd_PSvxOs5{o6U2iiQa4v2 zXHK2n`Bf#5pgEeRS{Lrd`kQ`9DBj>UW+plH^){YWbF|@-TuucOMkDgF4yE&v!9NUi)gzOxlJX&p>k~ zLaH2#V}jK@3V5L&-TVWd4^^p|e&`)9X54wfIjP?`(cq~G>5s3olgGQkg58%)_0O$u zms_G)f5BF#6Vf#{R~ANno}6q*t~a(gD*=d*@nz3-vtG%7n8=sC{4hEd#ZYHp<&OeM z^G&W5mMH>?>V^?#O-!T*g$x)^d35+$4C*YCO%{5N;i{%M(&q6u^K?(x@s^-m-KCX~ zenxy{zi!d5uER#)3KrQI!Kb$S$*Q`7G0#?@=1E1foJM%HE5A2|5WPi4Z)E^21$KQ6 z<-`X|&~0PY0$ms9San;}a2rzw?1$c>@QU58ANM;W6MYJbf~mZ8|3Cwr=a#|!%DScK zEzyjQ9=V4sLC7aYBB793_dgBba zaQ`X!r%`knzeY?*^rPOx?}&Ec%!!ko9NdnEF<6SeU8^le_=Emh`akpe3&J@gf)m{4 zvvr%)3p%?z#FI%v<18|WG0l#d+l7if(T>XHtMo~Pz$2`Dut2lb&)su8u?33#Lf5IT z*p3UOKO#HH>Vdg6?ivDS{i<%SdDp=UjgFMr*z?O!3ISxKsO8gQTI$ml=79 z+d*{ag{Qi#K-8Fb(KYY;`P(g}9xjvm{y_s%7> zDOig1Gv+CxKF(3wU5bNgbaEJ>AJZx|J;inwC1|* z?~K0!s=jT7ouanWv4wa0UVKrdN`z`Ye>-x{U83J1d|oDQp8F~&8)b32vtTz<3mILO z$fCvey}2N5ZenhBZv%0z9^PRr!cCk9jLkGOd z*lpj%o5LD#kc>pL4?ubYB9VGJw(4H$Dr~j5%Y+&^pqPh1P8MI8m+*5*Ft6R3BiHu< zm)?$KVnY89s9Ol3Yj@%4-ye6E=y%tQ+&debKcQArF1$Z)jYf))wxh*7-zClB-V+H( z807aU*(;q^_-cZ9cb|R#cnqyI+Ia8j&jhFy)qTeK;l4psZyXqbZ2Ek5PSGb&E5|^ilV> z{y)h|?QYZ{T;RA@@OYYZRxA5<++{xEgOQP+zLdN++jk5#UWIrKc={$2LQI0&)bszHVZxc`MR+pdyU$|+7y-@{f$0yTu|1h z#03f9c4ICUD~b7CQb?F8J;!dt}FgN2Y4N#$lV#j?0g^ zCuQJ*jah37)hgsPR&Mm&iEH7dXIG`T_4jV@lU89K(};_Gk{=BULmejDtRQx#$e_*5 z`7d4uu0TT?J^~1Pz0Y9IA!U-6H8&W3+K1P3;clvQtT-u?2)9CO5pML8NDSR4Uw%oD zqjZ#VsVktrYuM#Fk^4p}FXQE8cB$@d_3{XWFgV*~07BxB`RhfM^qTO8ky~rg*$Wji z6Iy1GFO2ZKd?KHiLuPg~J*0xEK?}|*3$h8LO&C#%j*=Rl`!`SXy?veSE$wZs?uvq` zPm8-zoZhtLFHC%Ug&qg;q=f5~n$7vXVcM1(niKpRu{ym4KoAa z3-y&v0E2!B=ab+zp%nwBt#RzlRfjFCS{i!Q^q82LKf(stqVf_|Wxo!dd^liD>(Qvm+h;57Fcv@x}q5E(Q+Ndn;Q%iK$E~ z(uX}(*yjz3-yZxnYQtc+U& zYE)Md=#H#B9D59j+mueBhdD#o-js%fm5NbtN5_bRVBKV@`U7A zg7`VzDzavBw}#VjQA#3#*?8n@#i@N~e2D)^Fk}-^b@ZyR`wdYK(50+Nu7twoV%~8T zo!_CEVAq`?*{GW4!GnoL-+X3D|El1n&DATfm4*RXxS$W?^GH+c9(EBdmo%%8PPm3< zl`LCpWAd`lr`}UBu83D}d(Hs}$6DB4n=p6MLEil$Pv>*dM`0dzv3vmb9rm9ZTjVEe zzWJsJjp%5^hh~$tqrJ`VmK+jMr;>jT6{13vJ&iPd*Yh(Ux?&*Lj0EJbSqKU0iG4-m zj>(O(e>;=Ph#_Z-Jhe)+`yTU;x^?w*UQ=M?O0|WH>_jOTpn~!=@Xeq*K z$n%&P{SSw#rxm!Tc!zJwWXhwrL}k|E5p!A#GuM;JFEk2=ASSy=!f^{S&HNw{44W3I*XbivxAfOS22F^LB-X zJjnL116l%zbUQB(rGs2VxQRm`Ru3NSsv3{2%TSUF>p=s z|Frj(aZx@0ALxQ~hb$e60#c$#NsDyHl1qtz)WU*DC@r8aA_^$5r1Szy$AZ!&NJvY| z(krEO-n01qKfTZH>vbRe9ueovoHKJKJ~Q(U9c2iVt(3Q0An4BHJL95Z)8j;Nxtrts zyMB3Re7;X8Wn&h)xWAuL_f)$Rt>_54E`;o=w_ys9&6&U4P}EB4dNAX44pm&}T{Cf&}`pawElHY*NAuSm1dcvO|}oHh}jbFWg>m*Mu z*4j@LMVqlfoK1fdcd58^RLaal-znG7R*$y_jIGi}6}7?liKkKM~lIE1j9)Nl;|Ck`gc5{rop57%4_qy|FMm?g`>{SELi9~o9dlSQgT zA@0NzASdm#e@QTaExX)!cPK-+jMb`X?Yj;=1tya$9Zby)vG!|Ud53ZKVvX9v-Fvg> z-F?Nvk^`Rx+oES~!7IalA*Va)B+<&eqKUgsORx>{c4OxDpHYhU57^~eCim6%c*0fm zc?0@Yr-eTq-_w=gP&v|%lB(mUPmk|6g2+%k0v~__Yx54Q^SYL#HZmGZyn%ez;$FgY z7TY=w3{8{><4^co1yocNWoTo7%JpyNgzG z!!$3tmVmO83Ue_4T2QNL{&eOi34=`Uis(%WGxBqKQrf16KQm zKDBF3`K1>rYA(qjR%!xvnD4_u%N^Qx)UU(8GKXMmtwSDK4_<*i0-92}E>rhUoO*ib z?Tnu`wRH9Gvs9xH$tUKZMN5oXCAMIwdON%iIQTd1w}(=@St>&Tl4;H(1d+jKW?1(v z12iI1+kX0nO+jo#$st-tXj}|t({g1(C~^I0P#oC56qSjF>tH7$3@2Wp>Ri^CrO?B` zDS!l?_Uapu=(6pd4$S83k>BFVfP>57q1!Mh*BeK?dVoO&v{5`ZXY}u{@7Lrzv^Y)B&Od*^Ewm2bm+xz_S_22ya%-g^ad#Dpou%VEnx%*R~ zVhqA-IdH@C6Z=jC*&28!L-+T0se&)D2Q#1j?gz2>O{^oLNxz%Cb-K3Fvj*^yY3=Xw z0z0fm7HWsjxGp%>JGZA?i!7$4xjPlDsDr`D3gn9KC`9shBpaDgSAX5+FMo@4A;)&+ z-W3&}JKO2vF3GquB)wk0iSVHw%mL^P3K>r*d#=~;a7xz9AJah$Fl%$sw&HT=kJCYw zOYD}T(ZUydoBEqIm^B>w}<|xAPfiiEO%5 zvd+~mf_8IVl>1dUKC*JC_u5Q;Bn|1=2~$OQqen`z1UL2QJ^^wog#gohaxhw$oA>a3 z|L@}v?kqdoTL;TXWqOI800Mi|`feqi}momg<@3=)mleu&_8S)|JJdH>Nj^fF|c@;?7g4^n>ZToeq+( zNv4#uqt}0ze|uedcu|`YyIOd2aYGR0uJz@oRiw8%{q-@)-`B>~&Q=1yIsNi|;pZ`$ zEfK!@Vv(c0PY82+8zig(G-F`sXZpn_Ix%keqpr8(Iepkbsi?B+u*e^tXV`!)JE}-!Qs;C|+fjQb>fe-qlS^(9!Q5 zABm@_EuSPjK!^UNkZ5@ATEXVIO>;f9C|65#oZOYKWCe@*tjaH!8)A2g6i-M@&3}<@ zwmsOr`&(y?Rb8vc;cta&MS5FKo5yq~;bwFc-}MKu{zt!TaPeck=4ELBWl^O&03{e; z?qL?0(&w(<*Ke_mqithnc`Fv1uo=n!)7-PdX1yi>cNkXeSWcCDNEhb6!TV)ZG) zn)zmL_0jHEH-FRM*K};Idz#z}zZVr$_b|Z|Hx20G0gO^1hD8U*C)g7!WT8*zVOc)+(aOCKxEt%(j;5} zB6I|u{rZN>SI_y*;|XUs(Kk%U+?NkL zn}QJz^YlPOkqLLT++vqmIY?h@n+N!b4Y%ve9D%{d%_>8C8?lBmSun|{6P|Hw3>pGM z)c9i@fOD0n0Bgfkbnjh+GAHH2xjobAr~RrUh}_!1d(@F!n)7LLnC`Cfg_X0QHl|eH zHK6%+OmC7{?5*9Ct=p+bKdQm)C8>*W7K1OeT^Y3#!}92N)VDu-Lb_UJ`=R+6kVmvYb?#CI|K06*t`c?}Ms52A z{# zOzopXPn(=DwpcezqXj8|Bke_`2G}pxUkRyi zMz9}~LVzG9_L@09g*uHMg==tHk;9bn#jnP)ThU^63@g0-yJH*P+0PoT_NVDAlBPKiqPDZAt#LLYrkWlVhyN&;3 z+F;<-abh{Uo*>y+Wtt_r?)M*f&~m+mn-Z>qFuG2r2LQ2WlM*N=r3!oc3P%g}g<@y? z2_`5xfX9!^{*L3}^$GqkRaGl;D{o6B;$V@p1=ub~G+Hcn8v4AxzFZsvXU9|#vvK7J z!l1P%>^`5cXm3MZ-gf{)67z`u;OXtO*@XnLx~z`_iPiSXz`$>&zLSs`Es|Xurl61f zLB(;t7EuzKE%a;hZ^ri!ZJ09=C24)d-xdJsvGWAfnQBirtHI^w&nIyvG-&mTc>1m9Qjm+}5ew_gbvZ_=JQ zF%iT4!s{x?u-yRNeMvb(VtM*CG3V(9G&4hIlk)vE(llg9yGG--LqozC?{8P|0ZdUg zqN84rhXb|7<``toGG%g0IfVB--fvx>nMr~r?Lm{6|IBP}RLG%C#9WT|oa+(aUj=b~ z@S^Go^k>e4PN{cxEtydjOXpKVkTHsuuh#Y^ordA(B%5FT)(5zR)5W&b#k~&Q?0-9n zluT!suAEPOzK?cS>Bb9_ddF0B3rXX9O5u{kqF%$vjE~8z?bw$Y+;%L@CV#mnv zcM@OdCVr$D1TtVe<3pGe1u*qe?m7OY4p{~D8Tq?&e{J`oiyn|4ut_kxq1!{d9u z`t?(O#cCAL+5}g6G`dv!YwRH2jH40;h0x-vi5wGoT5C>lUbEq<(a}s2%9UN31#yXv z;bS+ZxKZtDN37)ei@ZNZtsj$+gs4Ov(~<$}>4Su_P-hl(dNk#)b>mi|(Y94x^9V;d zFW)9J9)N|Oq@FvB3%4D(3)7LiNm5`;ZdLAWtI@Y0H+GlcT~k^|KPjRoaMY`*A1g}1 zI^=Ef!+HC=9?JV?o|XtKdwo$iLH(1{D7zjVsX-}&V7m4y=Sppb-qu1eI?qP$wB%y; zT=Z3uCHdTps$+)oR})G;V7Kg(Th_D%LFtBY-W-R^7jlEI4Cud}*?~8m^AitZJbofp zuRXJFzNaSX!!oWg)r)&(+U*I|wZAa3%B}z&yRi&s^h*8l@neIzMk>WTC}k*`@u z_*2}-bW&zUDa-1iCAOLQ9=EAA+d>aQS>br!&_RC%3(_BWnQodB+bf z(tl<@ER1HC(A_>Oh<5!6$S~A)SZa*R8|*hw{BE4d2;siiThAEh3nSQmWd!^3vAnMT z?BMsvLX+kL%nPz#lluzjHjHdxnWz1&VYdLh$QDo92iO-a|8*OO>MO{GHv;iE@c&r3Z8bik5CnHYhq$}?*uLq*-HUki3VzIlA7U^@TJXYCIDd27D)-%h3qTAI+ZDd05we&cFTe{R<$uDi@8L(eRyDXj`8|i zvs-6j$C2H@LrER$5C)ra=RbQ)S_6m#i|F)1`|`Bb^~YRq{}>>VO~C7b#Hrb0_L{;6 z_6{Q5cZ5oAb05{c9vDEm0ux$EW%YK+#q-3LJBH~-mf)wg?k4j!177MQbs={-(AI0LS*eoh}kx}$HU|8v|LYNc)8x^GL%9P8dS@Cjf1 zx97L^N+UCHQuJDj=+fCkOei)-$IPu|+Seol%8!1K+%@;8KzZgX#@`oq1SE;O0~)Y`CZXND88XyV!g1PKrUOkTh9YfmX-` z0T;)w-&{t9dW#b%UMo}`iU69T0;ASYZS6JrJi%i)v*FGBclebeaM!fipQ^^3S!J*j zs6oi(ISN&`vc~%fP!w-IkHwN?TH)A@D~xI~cj|D}HfoDmHCcq*0Gm9a1@7MZ6cW0T zSW~?NXq@^1tCr2(_q{+q)~lGr#?4=a=LucA+6hl9ebN`dtx*#E5@xSjfQ z>GVaP=VMENA`w;oiu;a0%RvqA4RM5z_22E#4^c8te<*IQ08~pJe$Pj>>bEQpgVI`) z4MYJsH&EMZZ~dI?r>m{HruU<%g|BL{Ef02-+u&I&m_u`OK&`VHN+p~V^6&v{LGpYv zs4Vn-YNzqd?w==z#dp)k_`b}z!xcYXVLS{SOB{2u>llo>_tEgld@!8oW+WU@=VIAD zXJFgdK(-=^-I`30u>%3IqS-?H_7Jo)G~(k6VfS8?t5c?<;#Kp^h59rbm!=KXZkZUQ zs>PzcFxUvjyPEMky(?o~#?B0%(6Vy*Llx8)GP%%S&Gy9bHPatUDxH<M)`hr_e5Md~4aTFMpD-z}n?Z-t4qy z*`75l^?8@PE@x-SgF0+0EExT0po*5Kj694(Mrbcj&Y4a7!nd+f;P)CPlFOjMh*a|X zLaoF~YuXqKQB8h`?%|d~EPGW3-)ltV)+V;s0R)9+7M(oR}}pNNYb{g`Dz< z$2cfYXV_fzj}K-=P=>OJV1ujL(`^Bg;O`goog2Z!iML(KCJ?|FDrNQcbWFD8QD_!7 zwK5$@6}bDiX7HOUMjAXThicb~Q7It~)k3Aa{oj-rEIN(qcgFVt8ZcoT?}W;8yM&L~r=C$IpcYYnQ^vhHk>gRFG}zeB<+cbI z1uTv{XIQcD^xF|1Z*WtM17+Xx>{aR4!Sr3iaaXjA|7>CA#wu>Jsw2K2dtL|iz99x~}gNS^a2KKjo%89TD{g7~O*9Wkbzs5((c@~SIn|>ZU=3LC( z3}BjK2Lm+hdCfD4zg-j8$z=S6;-DHboEvRgN#0z8IjEu#lGZP=DwzT*{O344Ou<7)qEhd*ZunZwIk?7@107 zPs>v84DFR)NY5svEqiTo`sAy3O?Ufqsm=>P>qh?@LiM0t2@Pm%J}q4MVwoYocs3cA z2#<#8rSA#~+Je%(xuuMl`x%lC7nawA!t2fwzqrlcV>7<8n77NbX-;QWopGJE+(C?r zsZ&HwVy@e5g?yqpNN)ac_3``Hwx_{onsidBW_NV!AF30|@Q80w(k_4l`=x$)m?-uG zT#p&0DU-LHv*{v=&3QD~z@1iB-YX@ssEm$bsQ&M0vp@3hy};edYi`;B51t>3j7HOc zmvDO}wkgM;Cu!Ce9L$pj*(+D@UYzHHWy074q+VQf9;mb&JS3E{(~`Iv(9JkG`tXKFFrJcuiIWJ=PaR*sU(^02k+SKTj+ zL3Z`kl^8eRPL$IU0=JuQ#O{so@G{e@jnsJff~BItWNXk4m1v{FIDo@^?G;XFAf$I* zI%yUnx9EYQ?oqH$EpKZ(Y|H{0uNc@+^K&hUjJX<*S#P^n5L>?Sv5Hn0N8AHy?XN*#5!=5IB|C0P^;cS9isG*i^LX`#=Up7C4z8g=CE;~!HCvo&6NCdYh`AwG5BAPJ zY@t-!N#+9GM11tk#Z|%91!&DEhfA&D%OTSHPk|2u@}svKrE4#lRDMF-k_TI`$?R#N znTmq54aYjO+B+LFJ`8Q)Y_GQDrtz+f*^pRabgz_wo>Yju_x)V1lc=+c8gi^j$6Ng^X*&(nqCm%8SQ*;k7o4>#=&b$0k}L~F`o(&#XHxVecY z$y3|nz#Mlc8&ffPs_p^DQ?H=?SrBm`{dl(Ilj3Lcn!Ei-R`p)&4` zq6b4KCn`sypN`ayDoFJkpvUU@`Hq;9rp>7Lm091J{5tS$acQvKeJOhA=txqq(-Ugm z=MWXA3Qd-LLD8?{^x=dt_K=$gKYkKZ{H_1&is+r7{`HHjYE2kT(BWBY#rujk5j#}0 zl!0S)_G)|Ty8f1M(T$7Jin=50!^k}kFYx%UT7Z}z*BM<9SJGEq_~VAj?!hXiM;h3D zFD#Uzh%24)7d*+{Fj7*Ug*?p&a zo=1|@JOPH~gtm@I25s{kFZ^5}-ow1!&dl>D6v}%j9_je4Lt8%*e)joyZB=v|<442& z=W93Kx@NJxC+U;-C!jF3;*mlq>79TIx>f|r3Jm8oE}SzUe1EJ9`Ogc*^y;ZWN}C@I z4NZsdwe}M-qsn4L_NsNl&rL5T8y9^w?&bA}ZQ8t+1A&MOB;qPP07-_wH6wa->Li=>Vr5dnHX0B zN@teY8Oua-N-8%Vb*XAOJAfDrDCW3sU8}8_{CFbst}RS(*Z#cg5JtXWXW3Pq8iE(q ztooctfe{Vw3Z}&2sA7q=eCZJvQ&F?Z${d*bR}|X-@ER~1(9{ltGE?H>S2IZ6^QuJ( zg@U#ZwShukYzOJK)OnzQY;qDsiiGlaEEQAgDF!S%UoL#C$w8-5EObwFO$wSofKm^B zc69f1acPl%Cx`(eeagjUpBIXo>@S@4teLwftmRBl>kWl?VNmcMllR5jk|!l~Z^utm z#(m8c_O|m86X(yS?dYTsqzu64FkSL91}aFYxA7jh+xN%q(kY1a3&GZEikO2RNK)64keZN~ZOjr6Z10#DzPRbr7eA1Jioqq65P}Ai zDoJWff^lMjyXK?@5k+K^R@77DoE>8?x@YckF+ireb}(Y-i)-f+Gr!8hkYt)$yf=cPiJAHl-h&DV?YN-n19HM*tFt5GmGaF^I~yXbbTe=h?IZ1RbLv^c$KeR@u++*+WC_ z2I~i!K--xCQ7J7kTVyLL@Z}xh?4e%Mk*+n`gEDSxrFa6wcl-TEn}}nUxh+0-hECu2 zJX6l;YQ`>NAke4dEo~%f)&c`i>AD^V$FSTzRwIugyV#YeP*U6o&b5AkP*7E)x zMpr><5>TdPWi{WbpzlQI%%r3V#A`tIO|$0VS@p15 zqXi`ZWtxV|m;&0PN6qqIE$ytFszkv^qq1)qf-Jbbt=s!p6k zNa@?j3%L&z`VBR~Zo}qQMNfry&e*=!0Lb#CGR38n4{z={`e=ec0xd0*8D64_X7pdI z1@E#zo8E4%^whRuQ~`o&Cg7KO{2p5k8gav{p@2+vxM<Bv&L)<9mW0J+-c%SrhpXs$D#4JPjVUVjAD=~2wQ z6PQxt#xmZaIzc;q9=z=U*s5ilKh&s2r6X~ez2c$?@@lTe_pz>ZeWP6MK{$bPtpWSS zadmHi%)-U&yfok7_AKT$2&D6b>3d0dy@f+0Nw0bDOy}IvWQfy!)Gx_#OS)QEBlvsb zzLzoy!#+8-UO?p3xBH5##$Rempn}CKtG!^prH!t)Dg_GY>@hVbc^4~ZlZue~C3T7E zXYM|yQ!SJ8(bJ{+y<`k0ID^0Y)Y$sECtuvo9>QE$ZP})bfv+!zlg}{wHPfSVmgy`@ zA|gdA4Bcw7P%k#CvbI_UJA%)eP1-y*`5GM*R&0@~JfHqbj+8YKV`* zOOVoAJ*vFP2^9Hxz_l()Djd()%Rm;G9$jtn5pZ-1Rj~DgLtg^8Z;NT2x;VMgrLP+x zr5Pvsy8#*vm`Pg(AIBXZ9QnN1v=D#HGETmjzDP(2s(Qdv z+fZp=G2}k5@yF)+(vb-5L^{%AIfX~?Ifd7@YTcfFn)I;KY zjzw07NVqkTcmCVC7q<$DL6-b+Q*#jEIGA?GwZYKrf+*vp3R&gps(sGmZ5dPpK2z}+ z+`@7Z_xO3>_YloIs1h*nUyoz&v=H`s=^e)%^eZasXNZCmuwBMCWqzjSVgFkUmK$<+ z+xSh0A>S;!J}qdQHvhSt%gXKEy4v%cbx?&D9l=8cv4BctZ2y$9yK`EIPr|3kTkf|Z zEaR#vftCT7O}HzVJk?2l%RYyN0#$zfCYx zgUXV}p6SMXyAB>o>8c-4iL@8aUeHpe)IBm=V1CZcUf^|aL0XTI z+_w9%9k9Nyk;Xm)6ekw#)tY1g zqCN3T6>vHQyLq66Y4C4djUoZ81p$6%;L?jRcRrM1piedkjf@%D8X z)c_F4fp8eL`{dA@A<1ky5TCa4|*yz2|Ug;RC~<+fX83#Q z10s45Phr5lzcr4&a?FOw-WE8@m(+caN`7wj2d?G3UFPerRHml$rp1o+eSUn%Q*(#v zsC_|Dl--K1|6@c;PQ)F~AdC5}1nNmo?YNI|7XRY^$)y;RD=}>JAK$?Jj*NaSpcV_v3 z>(%81!dBacwOp2;|>7b!ep~;D_3}%bHxW7tZe8&E5Ru zd})Lb6ql7ObyN0i~>%UVT=Iw{(`p!hc^dq#ZJ=$x$ZG&ymALF|bG!H^ zWVJ`}aqpeHw(2J4{-^tmZf8Wz4)`tD#Z?pR-gWY2mJ|>gs<9oPGPfAc*Tpin1#L4i?s$*)FeQY9&f;`2ig&S1`quvzXYc)KZa^ z8uPkG-R{yFCN=4EkM2wFA{!sUm7b?%`_4F*sm25Os7nuM3hWeauAGp38iUiEW}_y~UyM72krcm$KiZ^dx0Ljv%DA%2aJ=j?Sw0>hehtWL}>QFp}m zFvmMePIl9w9po5=U&^;Po9xmMJ{g$uXSvdMDWA_|l?a+#Jk}q^w+5YG z-SZ@&z*C=G3ZCCGe??G*a~$_2oeiG4MwdOA5|*F<5TAV zRX?vv!plz=xK71iGG?|D%LZ#X71nym0EeQsBX8QF@g4|5Heq7#O zXzoR@Ez(4NPaPki3xc7b7e!mVf%CM=KjZ4ns52Ndspd+p8!`ni_MZ`g#L6%{Fz+BTKL9S6uTJxr zE0JG4%6%{sm~_3kF22~x5|i$H^3R$>{6Szy({_2snwqx|N4i`L0#&1bWsifgTX*HV z7^y4X!_7_uTrzwFZ`<&jN>T3?OyYGe0&PCcR0^CCMpeEzAD+seWUjzBCp&?&@V$`! z4b6VOQXBcEa+5cBD6`u^Zhq4`Uv2PW`@5CgQ{*n zOV;GQXe8VN*5TO_bNY0Rtxxc+g({2oQLrChJe#*&8w(g1w!C6>m%xqki_?-Diwe)I z{e~vo@&HIAz@Hh^7dicwtm6s@ygDSS3)H@98YkwI#nvIjj=VQAZi)?F``S_#%L=GAkjcNNrF zMjuIk*)-Bf{eD6glJ(@`&pzOA6g^q1y}YPFcaYz^D&iO4QeNfCde#8&4?^z85M0TT z88?u_Zvp(qPCjh8q41EHAq1(ac$dk0?W@aE?R8_Sry46Khnp(p_!e1Kgy9i=Ev`Hr zu_@t`(Von+sXYE;IBusfHrpRB>NSzrxrB8KuxrcP#c63nhK8ZcU4G285t-)yuA*|_ zBH4rw=??DoO%G$}+vST&V;g!-S+o!C))1@wvk6)-@XYzaNv0s_ZPR=QaMYQN38TSQ z-c0&@S?)*_KoasJ0LR) zxOF7Q_`vW|xPT*9mimBnES38NvdjUhkkQcaZmTYgrtL5C;rq*%RAFk}R%n-$1Wet$ zpn}+apN(UgH{*9q$lhGq(-@0enUId_>z$eWbW3@2jRwomxv?eJ>KB!JKlY#F(@2=O zL_x6C5*#=Ybrr;R-u%tcnNRkMHFl2g4IZFsXUunt#+j8;gJ8&O_a6H@8|SwBV^}YP zV59&**Z?eO3KdwQcwii@bvx3vZT0WmLgRc`Cix96NADb8;c1pgFCRID(zb?!PzQs* zZ)_;3@qSrK_wnW+zK!ZWkTqON$}ei{s!IQXL}M8_8CC%A2?H8hMb>0Uk7qNmy;X6X z_CNMI_bItet)mBTa5DYBy{+%#Gm>{^p5#9q61TI+AAy2 z*iRqQ=$g;`9NJ49!jD)JBbc=iSs6N~8(2A7{SH&MprogZYz^^$3Ew4mUVc}TCiBxp zcaNp7t|d9CxL@Sb!12Z#<uj^KW7?hh;YnAhnp|fSa^m-J?o`2UzHqqcKd)sxQ6x(Ix+;%L!2jIAm%BVwL}A zDd=a0CMp0W5!djVR4Tf$>2iuz63qCVF}*_3U-zvrpi=3SX;Dn8Vv`b28&Fa?+Ui&)Zo=={rYqWLP!p=cD@`XF8?-WZWp z;ilMHcgo3p|Hg_SS2qWaQoRUYc%8Mog1ocLgICu0j#&*!tY-IlzYDh+DxaNgE)c{7 zBmddo(CG0doFuI^l*g!+3dVYy|K3t}gtBg8uPOJ_ihsP*>@0dCy6G~?RBbAdd%dBJ z@%VcGsvgiDYGvb1dcBeG(M{Ct>3m?*wBlbZT@<;5)OiqgfRcH$C_k0PQz`ceUeXiU z=(T+rhhWy3KOtV9d`nB-HM_?M@yn*D(#ePSrF>}gD*NYngG6OatM0zehPH;zkYRg# zuR>f3*C z%f5?tFXSt>S*0Xxz}Kw7=e=NWm3?By_EA-qTKRYroEQ6e#T`Nn(x1nBRhH!6O%;IY zivmsA>KBG~NSEa32D#ZfT;7WZ7{isojaL7BI&-b|;*neQJwaF7A-xYrHzqz?e!|sB zZW`~@#keiDK6PQa4ACr$qrJDJpfC1Ey%gIoIDL)QsyXeUL7Ti9CtsF?8W40au5k@o zAv>N+Tzvmc5U4suy<=)U!}_Io(7cyufy)E#>!;JlniH+Ggcwvwcy;646oS-d^=?gO zdZz>f%cbvX!B4|+U)wKj>?i0r?BkFk(yItEyDj4KxXz|DXMkM#2*oW0*dg$N$~=Aa7-@h%^rGhXw*7#La-3g8%GjUB^9*tph)0x{WLy6e~oWgphgF6ri!3ICbw~xPNB1uY2m6W){79K$l$@Bx1;VAO(Sg7%yv0gkI^a4+Bd2XRq5A>30h7BtwDe z0(kE+06}pZ{mhu*AG&sl7nVK)iiQB+X`feBDLq5s>LY-InM@0O&=G2C4TPfrtFsB9XNln* zk@1Tm&=ZR}*^OwDnqr%Ws;T5C5F>sK04iyS6)EBtO0Agm)DB`~f`?0oQmq09D4^|H z3nH^<`oXWlzo&Pt3_Y`%X9G^1L3i=9HOSwR{0gn8xHJh!^3paK6#DS8odG}bbq)gk zYa_s>J-#CXZ+h7#{$Cl-z+L}K{J#nVnt{fp!7AwAU;zMxF1rQjKWFRzH4>nP{@1Ji z*GT@q=orlx)ec?2{v3!b;&;X*xPgZRr1bFL0RF!p|39t?`zeAQ6+QyeoQq)K= 0.6" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/bagpipe": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/bagpipe/-/bagpipe-0.3.5.tgz", - "integrity": "sha512-42sAlmPDKes1nLm/aly+0VdaopSU9br+jkRELedhQxI5uXHgtk47I83Mpmf4zoNTRMASdLFtUkimlu/Z9zQ8+g==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "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.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-parser": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", - "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", - "dependencies": { - "cookie": "0.4.1", - "cookie-signature": "1.0.6" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express-rate-limit": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-5.5.1.tgz", - "integrity": "sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==" - }, - "node_modules/express-session": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", - "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", - "dependencies": { - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/express-session/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "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" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", - "dependencies": { - "http-proxy": "^1.16.2", - "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-primitive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", - "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kruptein": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-2.2.3.tgz", - "integrity": "sha512-BTwprBPTzkFT9oTugxKd3WnWrX630MqUDsnmBuoa98eQs12oD4n4TeI0GbpdGcYn/73Xueg2rfnw+oK4dovnJg==", - "dependencies": { - "asn1.js": "^5.4.1" - }, - "engines": { - "node": ">6" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/passport": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", - "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", - "dependencies": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/passport-http": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/passport-http/-/passport-http-0.3.0.tgz", - "integrity": "sha512-OwK9DkqGVlJfO8oD0Bz1VDIo+ijD3c1ZbGGozIZw+joIP0U60pXY7goB+8wiDWtNqHpkTaQiJ9Ux1jE3Ykmpuw==", - "dependencies": { - "passport-strategy": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/session-file-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/session-file-store/-/session-file-store-1.5.0.tgz", - "integrity": "sha512-60IZaJNzyu2tIeHutkYE8RiXVx3KRvacOxfLr2Mj92SIsRIroDsH0IlUUR6fJAjoTW4RQISbaOApa2IZpIwFdQ==", - "dependencies": { - "bagpipe": "^0.3.5", - "fs-extra": "^8.0.1", - "kruptein": "^2.0.4", - "object-assign": "^4.1.1", - "retry": "^0.12.0", - "write-file-atomic": "3.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/set-value": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", - "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", - "funding": [ - "https://github.com/sponsors/jonschlinkert", - "https://paypal.me/jonathanschlinkert", - "https://jonschlinkert.dev/sponsor" - ], - "dependencies": { - "is-plain-object": "^2.0.4", - "is-primitive": "^3.0.1" - }, - "engines": { - "node": ">=11.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "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" - } - } - }, - "dependencies": { - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/cookie-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.29", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", - "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/express-session": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.4.tgz", - "integrity": "sha512-7cNlSI8+oOBUHTfPXMwDxF/Lchx5aJ3ho7+p9jJZYVg9dVDJFh3qdMXmJtRsysnvS+C6x46k9DRYmrmCkE+MVg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/node": { - "version": "14.18.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", - "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==", - "dev": true - }, - "@types/passport": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-0.4.7.tgz", - "integrity": "sha512-EePlxNYx5tf3n0yjdPXX0/zDOv0UCwjMyQo4UkWGlhHteNDItAj7TfDdLttSThVMKQz3uCW7lsGzMuml0f8g9Q==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "bagpipe": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/bagpipe/-/bagpipe-0.3.5.tgz", - "integrity": "sha512-42sAlmPDKes1nLm/aly+0VdaopSU9br+jkRELedhQxI5uXHgtk47I83Mpmf4zoNTRMASdLFtUkimlu/Z9zQ8+g==" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "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.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" - }, - "cookie-parser": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", - "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", - "requires": { - "cookie": "0.4.1", - "cookie-signature": "1.0.6" - } - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - } - } - }, - "express-rate-limit": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-5.5.1.tgz", - "integrity": "sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==" - }, - "express-session": { - "version": "1.17.3", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", - "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", - "requires": { - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" - }, - "dependencies": { - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", - "requires": { - "http-proxy": "^1.16.2", - "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-primitive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", - "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kruptein": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-2.2.3.tgz", - "integrity": "sha512-BTwprBPTzkFT9oTugxKd3WnWrX630MqUDsnmBuoa98eQs12oD4n4TeI0GbpdGcYn/73Xueg2rfnw+oK4dovnJg==", - "requires": { - "asn1.js": "^5.4.1" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "requires": { - "object-visit": "^1.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" - }, - "passport": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", - "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", - "requires": { - "passport-strategy": "1.x.x", - "pause": "0.0.1" - } - }, - "passport-http": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/passport-http/-/passport-http-0.3.0.tgz", - "integrity": "sha512-OwK9DkqGVlJfO8oD0Bz1VDIo+ijD3c1ZbGGozIZw+joIP0U60pXY7goB+8wiDWtNqHpkTaQiJ9Ux1jE3Ykmpuw==", - "requires": { - "passport-strategy": "1.x.x" - } - }, - "passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==" - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "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" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "session-file-store": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/session-file-store/-/session-file-store-1.5.0.tgz", - "integrity": "sha512-60IZaJNzyu2tIeHutkYE8RiXVx3KRvacOxfLr2Mj92SIsRIroDsH0IlUUR6fJAjoTW4RQISbaOApa2IZpIwFdQ==", - "requires": { - "bagpipe": "^0.3.5", - "fs-extra": "^8.0.1", - "kruptein": "^2.0.4", - "object-assign": "^4.1.1", - "retry": "^0.12.0", - "write-file-atomic": "3.0.3" - } - }, - "set-value": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", - "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", - "requires": { - "is-plain-object": "^2.0.4", - "is-primitive": "^3.0.1" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", - "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==" - }, - "uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "requires": { - "random-bytes": "~1.0.0" - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - } - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==" - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } - } -} diff --git a/dashboard/origin-mlx/server/package.json b/dashboard/origin-mlx/server/package.json deleted file mode 100644 index 46a5eae4..00000000 --- a/dashboard/origin-mlx/server/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "description": "Frontend webserver package for MLX", - "main": "server.js", - "dependencies": { - "cookie-parser": "^1.4.5", - "express": "^4.16.3", - "express-rate-limit": "^5.2.6", - "express-session": "^1.17.1", - "http-proxy-middleware": "^0.18.0", - "passport": "^0.4.1", - "passport-http": "^0.3.0", - "session-file-store": "^1.5.0", - "set-value": "^4.1.0", - "typescript": "^3.5.2" - }, - "devDependencies": { - "@types/cookie-parser": "^1.4.2", - "@types/express": "^4.17.1", - "@types/express-session": "^1.17.1", - "@types/node": "^14.14.45", - "@types/passport": "^0.4.1" - }, - "scripts": { - "build": "tsc --lib es2015 --outDir ./dist --typeRoots ./node_modules/@types *.ts" - } -} diff --git a/dashboard/origin-mlx/server/server.ts b/dashboard/origin-mlx/server/server.ts deleted file mode 100644 index dd81bc4b..00000000 --- a/dashboard/origin-mlx/server/server.ts +++ /dev/null @@ -1,236 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 - -import * as express from 'express'; -import * as ratelimit from 'express-rate-limit' -import * as session from 'express-session'; -import * as fileStore from 'session-file-store'; -import * as passport from "passport"; -import * as cookieParser from "cookie-parser"; -import { BasicStrategy } from "passport-http"; -import { loadUsers, DEFAULT_ADMIN_EMAIL } from "./users"; -import { Application, static as StaticHandler } from 'express'; -import * as fs from 'fs'; -import { randomBytes } from 'crypto'; -import * as proxy from 'http-proxy-middleware'; -import * as path from 'path'; -import * as process from 'process'; -import { ClientRequest } from 'http'; - -const { - MLX_API_ENDPOINT = 'mlx-api', - REACT_APP_BASE_PATH = '', - SESSION_SECRET = randomBytes(64).toString('hex'), - KUBEFLOW_USERID_HEADER = 'kubeflow-userid', - REACT_APP_DISABLE_LOGIN = 'false', - REACT_APP_RATE_LIMIT = 100, -} = process.env; - -const app = express() as Application; - -const apiPrefix = 'apis/v1alpha1'; - -const staticDir = path.resolve(process.argv[2]); - -const port = process.argv[3] || 3000; - -const apiServerAddress = `http://${MLX_API_ENDPOINT}`; - -const disableLogin = REACT_APP_DISABLE_LOGIN === 'true'; - -type User = { - username: string; - email: string; - roles: string[]; -}; - -const proxyCheckingMiddleware = []; -// enable login and permission check -if (!disableLogin) { - initLogin(app); - proxyCheckingMiddleware.push(checkPermissionMiddleware); -} - -if (REACT_APP_BASE_PATH.length !== 0) { - app.all('/' + apiPrefix + '/*', - [...proxyCheckingMiddleware, getForwardProxyMiddleware(!disableLogin)]); -} - -app.all(REACT_APP_BASE_PATH + '/' + apiPrefix + '/*', - [...proxyCheckingMiddleware, getForwardProxyMiddleware(!disableLogin, REACT_APP_BASE_PATH)]); - -app.all('/session-validation*', getSessionValidator(!disableLogin)); - -const staticHandler = StaticHandler(staticDir, {redirect: false}) - -app.use(REACT_APP_BASE_PATH, (req, res, next) => { - const staticIndex = req.url.indexOf('/static/') - if (staticIndex !== -1) { - req.url = req.url.substring(staticIndex) - } - else if (!req.url.endsWith('.js')) { - req.url = '/' - } - StaticHandler(staticDir)(req, res, next); -}); - -// TODO: This may or may not be needed anymore. Originally there were routing issues that -// caused routes to incorrectly fail when refreshing the react page. -// These should be fixed now, but should be tested to ensure they are. -if (REACT_APP_BASE_PATH.length !== 0) { - app.use('/', staticHandler); - app.use('/pipelines/', staticHandler); - app.use('/components/', staticHandler); - app.use('/models/', staticHandler); - app.use('/operators/', staticHandler); - app.use('/notebooks/', staticHandler); - app.use('/upload/', staticHandler); - app.use('/inferenceservices/', staticHandler); - app.use('/settings', staticHandler); - app.use('/delete/', staticHandler); - app.use('/kiali/', staticHandler); - app.use('/experiments/', staticHandler); -} - -var limiter = new ratelimit({ - windowMs: 1*60*1000, // 1 minute - max: REACT_APP_RATE_LIMIT -}); - -app.get('*', limiter, (req, res) => { - // TODO: look into caching this file to speed up multiple requests. - res.sendFile(path.resolve(staticDir, 'index.html')); -}); - -app.listen(port, () => { - console.log('Server listening at http://localhost:' + port); -}); - -function initLogin(app: express.Application) { - const users = loadUsers(); - - passport.serializeUser((user: User, done) => { - done(undefined, user.username); - }); - passport.deserializeUser((username: string, done) => { - done(undefined, { - username: username, - email: users[username].email, - roles: users[username].roles - }); - }); - - passport.use(new BasicStrategy( - (userid: string, password: string, done: (err: Error, user?: User|boolean) => any) => { - if (users[userid] === undefined || users[userid].password !== password) { - return done(null, false); - } - return done(null, { - username: userid, - email: users[userid].email, - roles: users[userid].roles - }); - } - )); - - const storeFunc = fileStore(session); - // Register related middlewares - app.use(cookieParser()); - const sessOption : session.SessionOptions = { - secret: SESSION_SECRET, - saveUninitialized: true, - cookie: {secure: 'auto', maxAge: 86400000}, - store: new storeFunc({}), - resave: false - } - app.use(session(sessOption)); - app.use(passport.initialize()) - app.use(passport.session()) - - const redirectPath = REACT_APP_BASE_PATH.length === 0 ? '/' : REACT_APP_BASE_PATH; - app.get([REACT_APP_BASE_PATH + '/login'], - passport.authenticate('basic'), - (req, res) => { - res.cookie('userinfo', JSON.stringify(req.user), {maxAge: 86400000}); - res.redirect(redirectPath); - } - ); -} - -/** - * get session validator based on `login` flag - */ -function getSessionValidator(login: boolean) : - (req: express.Request, res: express.Response) => void { - - if (login) { - return sessionValidator; - } else { - /* - when login is disabled, all requests are treated as admin - */ - return (req: express.Request, res: express.Response) => { - res.setHeader(KUBEFLOW_USERID_HEADER, DEFAULT_ADMIN_EMAIL); - res.status(200); - res.send(); - } - } -} - -function getForwardProxyMiddleware(login: boolean, rewritePath?: string) : - (req: express.Request, res: express.Response) => void { - - const proxyOpts: proxy.Options = { - changeOrigin: true, - target: apiServerAddress, - }; - if (login) { - proxyOpts.onProxyReq = (proxyReq: ClientRequest, req: express.Request) => { - if (req.user) { - proxyReq.setHeader(KUBEFLOW_USERID_HEADER, req.user.email); - } - console.log('Proxied request: ', proxyReq.path); - }; - } else { - proxyOpts.onProxyReq = (proxyReq: ClientRequest, req: express.Request) => { - proxyReq.setHeader(KUBEFLOW_USERID_HEADER, DEFAULT_ADMIN_EMAIL); - console.log('Proxied request: ', proxyReq.path); - }; - } - if (rewritePath) { - const pattern = RegExp(`^${rewritePath}`); - proxyOpts.pathRewrite = (path: string) : string => { - return path.replace(pattern, ''); - } - } - return proxy(proxyOpts); -} - -/** - * Validate the request to see if the request contains a valid user information. - * This is used as a ext authz for the custom action of istio authorizationpolicy - */ -function sessionValidator (req: express.Request, res: express.Response) { - if (req.user === undefined ) { - res.sendStatus(403); - return; - } - res.setHeader(KUBEFLOW_USERID_HEADER, req.user.email); - res.status(200); - res.send(); -}; - -/** - * Reject all non-GET requests if there is no valid login - * session. - */ -function checkPermissionMiddleware( - req: express.Request, - res: express.Response, - next: express.NextFunction) { - - if (req.method !== 'GET' && req.user === undefined ) { - res.sendStatus(403); - return; - } - next(); -} diff --git a/dashboard/origin-mlx/server/users.ts b/dashboard/origin-mlx/server/users.ts deleted file mode 100644 index 9515cef4..00000000 --- a/dashboard/origin-mlx/server/users.ts +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 - -import {existsSync} from 'fs'; - -/** - * Represent all of the users and their information, including - * password and roles. - */ -export type Users = { - [name: string]: UserInfo -}; - -/** - * User information - */ -type UserInfo = { - password: string; // password - email: string; // email - roles: string[]; // roles for the user -}; - -const DEFAULT_USER_CONFIG = '/workspace/models/admin.json'; -export const DEFAULT_ADMIN_EMAIL = 'mlx@ibm.com'; - -export function loadUsers(): Users { - if (existsSync(DEFAULT_USER_CONFIG)) { - return require(DEFAULT_USER_CONFIG); - } - // return default settings if config file doesn't exist - return {"admin": {"password": "passw0rd", "email": DEFAULT_ADMIN_EMAIL, "roles": ["admin"]}}; -} - diff --git a/dashboard/origin-mlx/src/App.css b/dashboard/origin-mlx/src/App.css deleted file mode 100644 index 71818f8a..00000000 --- a/dashboard/origin-mlx/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -.App { - text-align: center; -} - -.App-logo { - animation: App-logo-spin infinite 20s linear; - height: 40vmin; - pointer-events: none; -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/dashboard/origin-mlx/src/App.test.tsx b/dashboard/origin-mlx/src/App.test.tsx deleted file mode 100644 index efd26a10..00000000 --- a/dashboard/origin-mlx/src/App.test.tsx +++ /dev/null @@ -1,14 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React from 'react'; -import ReactDOM from 'react-dom'; -import App from './App'; - -it('renders without crashing', () => { - const div = document.createElement('div'); - ReactDOM.render(, div); - ReactDOM.unmountComponentAtNode(div); -}); diff --git a/dashboard/origin-mlx/src/App.tsx b/dashboard/origin-mlx/src/App.tsx deleted file mode 100644 index 690bdfed..00000000 --- a/dashboard/origin-mlx/src/App.tsx +++ /dev/null @@ -1,473 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React, { Dispatch, useEffect } from 'react'; -import reducer, { initial } from './lib/stores/reducer'; -import StoreContext, { Store } from './lib/stores/context'; -import { Action, State } from './lib/stores/types'; -import { GET_SETTINGS } from './lib/stores/settings'; -import { findInvalidCacheEntries } from './lib/api/artifacts'; -import { getSettings } from './lib/api/settings'; -import { getUserInfo, hasRole } from './lib/util'; - -import TagManager from 'react-gtm-module'; - -import { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom'; -import Sidebar from './components/Sidebar'; -import PipelineDetail from './components/Detail/PipelineDetail'; -import DatasetDetail from './components/Detail/DatasetDetail'; -import ComponentDetail from './components/Detail/ComponentDetail'; -import ModelDetail from './components/Detail/ModelDetail'; -import NotebookDetail from './components/Detail/NotebookDetail'; -import KFServingDetail from './components/Detail/KFServingDetail'; -import './App.css'; - -import { SettingsPage } from './pages/SettingsPage'; -import LandingPage from './pages/LandingPage' -import ExternalLinksPage from './pages/ExternalLinksPage' -import MetaDeletePage from './pages/MetaDeletePage'; -import MetaFeaturedPage from './pages/MetaFeaturedPage'; -import KFServingFeaturedPage from './pages/KFServingFeaturedPage'; -import KFServingAllPage from './pages/KFServingAllPage'; -import KFServingDetailPage from './pages/KFServingDetailPage'; -import KFServingUploadPage from './pages/KFServingUploadPage'; -import MetaAllPage from './pages/MetaAllPage'; -import UploadPage from './pages/UploadPage'; -import MetaDetailPage from './pages/MetaDetailPage'; -import IframePage from './pages/IframePage'; -import Default404Page from './pages/Default404Page'; - -// initialize Google Analytics (Google Tag Manager) -if (process.env.REACT_APP_GTM_ID) { - console.log("Google Analytics is enabled."); - const tagManagerArgs = { - gtmId: process.env.REACT_APP_GTM_ID - } - TagManager.initialize(tagManagerArgs); -} - -const isAdmin = hasRole(getUserInfo(), 'admin'); - -function App() { - - var prefix = process.env.REACT_APP_BASE_PATH || "" - var kfpStandalone = process.env.REACT_APP_KFP_STANDALONE === 'true' - - // Removes the stored path if the user navigated away from the /experiments page - if (!window.location.pathname.substring(0, prefix.length+12).includes(prefix + "/experiments")) - localStorage.removeItem("experiments-iframe") - - // receive iframe message when iframe is loaded and send correct namespace back. - window.addEventListener('message', (event: MessageEvent) => { - const { data, origin } = event; - switch (data.type) { - case 'iframe-connected': - if (!kfpStandalone) { - ['iframe', 'iframe-run'].forEach((id) => { - const element = document.getElementById(id) as HTMLIFrameElement; - if (element) { - // TODO: get namespace from user info, use fixed value: mlx for now - element.contentWindow.postMessage({type: 'namespace-selected', value: 'mlx'}, origin); - } - }) - } - break; - } - }); - - // Removes any invalid cache entries after enough time has passed since the last invalid check - useEffect(() => { - findInvalidCacheEntries() - }) - - return ( -

- ) => { - const { api } = settings.endpoints - const API = api.value || api.default - getSettings(`${API}/apis/v1alpha1`) - .then(settings => d({ type: GET_SETTINGS, settings })) - .catch(error => console.log("Failed to reach API: ", API)) - }} - > - - {({ store }) => { - const { settings } = store - - const { api, kfp } = settings.endpoints - const API = api.value || api.default - const KFP = kfp.value || kfp.default - - const { execute } = settings.capabilities - const canRun = execute.value !== undefined ? execute.value : execute.default - - const switchProps : AppRouterSwitchProps = { - API, KFP, canRun - } - - return ( - - - {AppRouterSwitch(switchProps)} - - - ) - }} - - -
- ) -} - -interface AppRouterSwitchProps { - API: string, - KFP: string, - canRun: boolean -} - -function AppRouterSwitch(props: AppRouterSwitchProps) { - const {API, KFP, canRun} = props - - return ( - - - - - - } - /> - - - } - /> - - - } - /> - - - } - /> - - - } - /> - { - window.open(`${KFP}/hub/login`, '_blank') - routeProps.history.goBack() - return null - }} - /> - - - } - /> - - 'OpenSource'} - alternateBG - leftBtn="Featured" - leftLink="/pipelines" - leftIcon="arrow_back" - rightBtn="Register a Pipeline" - rightLink="/upload/pipelines" - canEdit={true} - /> - } - /> - - 'OpenSource'} - alternateBG - leftBtn="Featured" - leftLink="/datasets" - leftIcon="arrow_back" - rightBtn="Register a Dataset" - rightLink="/upload/datasets" - canEdit={true} - /> - } - /> - - - asset.metadata?.annotations?.platform - || 'OpenSource'} - alternateBG - leftBtn="Featured" - leftLink="/components" - leftIcon="arrow_back" - rightBtn="Register a Component" - rightLink="/upload/components" - canEdit={true} - /> - } - /> - - asset.domain} - alternateBG - leftBtn="Featured" - leftLink="/models" - leftIcon="arrow_back" - rightBtn="Register a Model" - rightLink="/upload/models" - canEdit={true} - /> - } - /> - - asset.domain} - alternateBG - leftBtn="Featured" - leftLink="/inferenceservices" - leftIcon="arrow_back" - rightBtn="Deploy a Service" - rightLink="/upload/inferenceservices" - rightAdmin={true} - canEdit={true} - /> - } - /> - - asset.metadata?.annotations?.platform || 'OpenSource'} - alternateBG - leftBtn="Featured" - leftLink="/notebooks" - leftIcon="arrow_back" - rightBtn="Register a Notebook" - rightLink="/upload/notebooks" - canEdit={true} - /> - } - /> - - - } - /> - } - /> - } - /> - - - - } - /> - } /> - ( - - - - )} - /> - ( - - - - )} - /> - ( - - - - )} - /> - ( - - - - )} - /> - ( - - - - )} - /> - ( - - - - )} - /> - }/> - - ) -} - -interface ProtectedRouteProps { - exact?: boolean, - path: string, - render: any -} -function ProtectedRoute(props: ProtectedRouteProps) { - - return ( - - } - /> - ) -} - -export default App; diff --git a/dashboard/origin-mlx/src/CSSReset.tsx b/dashboard/origin-mlx/src/CSSReset.tsx deleted file mode 100644 index 957fd65e..00000000 --- a/dashboard/origin-mlx/src/CSSReset.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { cssRaw } from 'typestyle'; - -/* - * Copyright 2018 kubeflow.org - * - * SPDX-License-Identifier: Apache-2.0 - */ - -cssRaw(` -@import url(https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700|Google+Sans:400,700); -/* Reset */ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - border: 0; - /* Consider adding flex-shrink: 0; */ - font-size: 100%; - margin: 0; - padding: 0; - vertical-align: baseline; -} - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} - -ol, ul { - list-style: none; -} - -blockquote, q { - quotes: none; -} - -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} -`); diff --git a/dashboard/origin-mlx/src/Css.test.tsx b/dashboard/origin-mlx/src/Css.test.tsx deleted file mode 100644 index 8d7da6de..00000000 --- a/dashboard/origin-mlx/src/Css.test.tsx +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2018 kubeflow.org - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import { spacing, _paddingInternal } from './Css'; -import * as Css from './Css'; - -describe('Css', () => { - describe('padding', () => { - it('returns padding units in all directions by default', () => { - expect(_paddingInternal()).toEqual({ - paddingBottom: spacing.base, - paddingLeft: spacing.base, - paddingRight: spacing.base, - paddingTop: spacing.base, - }); - }); - - it('returns specified padding units in all directions', () => { - expect(_paddingInternal(100)).toEqual({ - paddingBottom: 100, - paddingLeft: 100, - paddingRight: 100, - paddingTop: 100, - }); - }); - - it('returns default units in specified directions', () => { - expect(_paddingInternal(undefined, 'lr')).toEqual({ - paddingLeft: spacing.base, - paddingRight: spacing.base, - }); - }); - - it('calls internal padding with the same arguments', () => { - const spy = jest.spyOn(Css, 'padding'); - Css.padding(123, 'abcdefg'); - expect(spy).toHaveBeenCalledWith(123, 'abcdefg'); - }); - }); -}); diff --git a/dashboard/origin-mlx/src/Css.tsx b/dashboard/origin-mlx/src/Css.tsx deleted file mode 100644 index f4763af8..00000000 --- a/dashboard/origin-mlx/src/Css.tsx +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Copyright 2018 kubeflow.org - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import createMuiTheme from '@material-ui/core/styles/createMuiTheme'; -import { NestedCSSProperties } from 'typestyle/lib/types'; -import { style, stylesheet } from 'typestyle'; - -// tslint:disable:object-literal-sort-keys -export const zIndex = { - DROP_ZONE_OVERLAY: 1, - GRAPH_NODE: 1, - BUSY_OVERLAY: 2, - PIPELINE_SUMMARY_CARD: 2, - SIDE_PANEL: 2, -}; - -export const color = { - activeBg: '#eaf1fd', - alert: '#f9ab00', // Google yellow 600 - background: '#fff', - blue: '#4285f4', // Google blue 500 - disabledBg: '#666', - divider: '#e0e0e0', - errorBg: '#FBE9E7', - errorText: '#D50000', - foreground: '#000', - graphBg: '#f5f5f5', - grey: '#5f6368', // Google grey 500 - hoverBg: '#eee', - inactive: '#5F6368', - lightGrey: '#eee', // Google grey 200 - lowContrast: '#80868b', // Google grey 600 - secondaryText: 'rgba(0, 0, 0, .88)', - separator: '#e8e8e8', - strong: '#212121', - success: '#34a853', - terminated: '#80868b', - theme: '#666', - themeDarker: '#3f3f3f', - warningBg: '#f9f9e1', - weak: '#9AA0A6', -}; - -export const dimension = { - auto: 'auto', - base: 40, - jumbo: 64, - large: 48, - small: 36, - tiny: 24, - xlarge: 56, - xsmall: 32, -}; - -const baseSpacing = 24; -export const spacing = { - base: baseSpacing, - units: (unit: number) => baseSpacing + unit * 4, -}; - -export const fonts = { - code: '"Source Code Pro", monospace', - main: '"Google Sans", "Helvetica Neue", sans-serif', - secondary: '"Roboto", "Helvetica Neue", sans-serif', -}; - -export const fontsize = { - base: 14, - large: 18, - medium: 16, - small: 12, - title: 18, -}; - -const palette = { - primary: { - dark: color.themeDarker, - main: color.theme, - }, - secondary: { - main: 'rgba(0, 0, 0, .38)', - }, -}; - -export const theme = createMuiTheme({ - overrides: { - MuiButton: { - flat: { - fontSize: fontsize.base, - fontWeight: 'bold', - minHeight: dimension.tiny, - textTransform: 'none', - }, - flatPrimary: { - border: '1px solid #ddd', - cursor: 'pointer', - fontSize: fontsize.base, - marginRight: 10, - textTransform: 'none', - }, - flatSecondary: { - color: color.theme, - }, - root: { - '&$disabled': { - backgroundColor: 'initial', - }, - color: color.theme, - marginRight: 10, - padding: '0 8px' - }, - }, - MuiDialogActions: { - root: { - margin: 15, - }, - }, - MuiDialogTitle: { - root: { - fontSize: fontsize.large, - }, - }, - MuiFormControlLabel: { - root: { - marginLeft: 0, - }, - }, - MuiFormLabel: { - filled: { - marginLeft: 0, - marginTop: 0, - }, - root: { - '&$focused': { - marginLeft: 0, - marginTop: 0, - }, - fontSize: fontsize.base, - marginLeft: 5, - marginTop: -8, - }, - }, - MuiIconButton: { - root: { - padding: 9, - }, - }, - MuiInput: { - input: { padding: 0 }, - root: { padding: 0 } - }, - MuiInputAdornment: { - positionEnd: { - paddingRight: 0, - }, - root: { padding: 0 }, - }, - MuiTooltip: { - tooltip: { - backgroundColor: '#666', - color: '#f1f1f1', - fontSize: 12, - } - }, - }, - palette, - typography: { - fontFamily: fonts.main, - fontSize: fontsize.base + ' !important' as any, - useNextVariants: true, - }, -}); - -export const commonCss = stylesheet({ - absoluteCenter: { - left: 'calc(50% - 15px)', - position: 'absolute', - top: 'calc(50% - 15px)', - }, - busyOverlay: { - backgroundColor: '#ffffffaa', - bottom: 0, - left: 0, - position: 'absolute', - right: 0, - top: 0, - zIndex: 1, - }, - buttonAction: { - $nest: { - '&:disabled': { - backgroundColor: color.background, - }, - '&:hover': { - backgroundColor: theme.palette.primary.dark, - }, - }, - backgroundColor: palette.primary.main, - color: 'white', - }, - ellipsis: { - display: 'block', - overflow: 'hidden', - textOverflow: 'ellipsis', - whiteSpace: 'nowrap', - }, - flex: { - alignItems: 'center !important', - display: 'flex !important', - flexShrink: 0, - }, - flexColumn: { - display: 'flex !important', - flexDirection: 'column', - }, - flexGrow: { - display: 'flex !important', - flexGrow: 1, - }, - header: { - fontSize: fontsize.large, - fontWeight: 'bold', - paddingBottom: 16, - paddingTop: 20, - }, - ibmCard: { - backgroundColor: '#525252', - borderRadius: '7px', - fontFamily: 'Helvetica Neue, Arial, sans-serif', - height: '100%', - marginBottom: '10px', - width: '20%', - boxShadow: '0 2px 4px rgba(0,0,0,0.16), 0 2px 4px rgba(0,0,0,0.23)', - $nest: { - '&:hover': { - boxShadow: '0 6px 12px rgba(0,0,0,0.25), 0 6px 12px rgba(0,0,0,0.43)' - } - } - }, - - ibmCardBackGround: { - backgroundColor: '#525252', - fontFamily: 'Helvetica Neue, Arial, sans-serif', - borderRadius: '7px', - padding: '10px 10px 0px 10px', - // TODO: need to change to adjust to ibmCard's height automatically - position: 'relative', - verticalAlign: 'top', - height: '15vw', - width: '15vw', - boxShadow: '0 2px 4px rgba(0,0,0,0.16), 0 2px 4px rgba(0,0,0,0.23)', - $nest: { - '&:hover': { - boxShadow: '0 6px 12px rgba(0,0,0,0.25), 0 6px 12px rgba(0,0,0,0.43)' - } - }, - overflow: 'hidden' - }, - ibmCardBottom: { - bottom: '0px', - padding: '0 0 10px 0', - backgroundColor: '#525252', - position: 'absolute', - width: '15vw', - display: 'flex', - justifyContent: 'space-between', - alignItems: 'flex-end' - }, - - ibmCardDescription: { - color: '#fff', - margin: '10px 0 0 0' - }, - - ibmCardLink: { - textDecoration: 'none', - }, - - ibmTable: { - padding: '5px', - borderSpacing: '30px' - }, - - ibmTag: { - alignItems: 'center', - border: '1px solid #b0b0b0', - borderRadius: '.93rem', - display: 'inline-flex', - fontFamily: 'ibm-plex-sans, Helvetica Neue, Arial, sans-serif', - padding: '.18rem .4rem', - whiteSpace: 'nowrap', - maxWidth: '85%', - textOverflow: 'ellipsis' - }, - - infoIcon: { - color: color.lowContrast, - height: 16, - width: 16 - }, - link: { - $nest: { - '&:hover': { - color: color.theme, - textDecoration: 'underline', - }, - }, - color: color.strong, - cursor: 'pointer', - textDecoration: 'none', - }, - noShrink: { - flexShrink: 0, - }, - page: { - display: 'flex', - flexFlow: 'column', - flexGrow: 1, - overflow: 'auto', - }, - pageOverflowHidden: { - display: 'flex', - flexFlow: 'column', - flexGrow: 1, - overflowX: 'auto', - overflowY: 'hidden', - }, - prewrap: { - whiteSpace: 'pre-wrap', - }, - scrollContainer: { - background: - `linear-gradient(white 30%, rgba(255,255,255,0)), - linear-gradient(rgba(255,255,255,0), white 70%) 0 100%, - radial-gradient(farthest-corner at 50% 0, rgba(0,0,0,.2), rgba(0,0,0,0)), - radial-gradient(farthest-corner at 50% 100%, rgba(0,0,0,.2), rgba(0,0,0,0)) 0 100%`, - backgroundAttachment: 'local, local, scroll, scroll', - backgroundColor: 'white', - backgroundRepeat: 'no-repeat', - backgroundSize: '100% 40px, 100% 40px, 100% 2px, 100% 2px', - overflow: 'auto', - position: 'relative', - }, - textField: { - display: 'flex', - height: 40, - marginBottom: 20, - marginTop: 15, - }, - unstyled: { - color: 'inherit', - outline: 'none', - textDecoration: 'none', - }, -}); - -export function _paddingInternal(units?: number, directions?: string): NestedCSSProperties { - units = units || baseSpacing; - directions = directions || 'blrt'; - const rules: NestedCSSProperties = {}; - if (directions.indexOf('b') > -1) { - rules.paddingBottom = units; - } - if (directions.indexOf('l') > -1) { - rules.paddingLeft = units; - } - if (directions.indexOf('r') > -1) { - rules.paddingRight = units; - } - if (directions.indexOf('t') > -1) { - rules.paddingTop = units; - } - return rules; -} - -export function padding(units?: number, directions?: string): string { - return style(_paddingInternal(units, directions)); -} diff --git a/dashboard/origin-mlx/src/components/Button/Button.tsx b/dashboard/origin-mlx/src/components/Button/Button.tsx deleted file mode 100644 index bdeaf1b1..00000000 --- a/dashboard/origin-mlx/src/components/Button/Button.tsx +++ /dev/null @@ -1,14 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React from 'react' -import MaterialButton from '@material-ui/core/Button' - - -function Button(props: any) { - return ({props.children}) -} - -export default Button diff --git a/dashboard/origin-mlx/src/components/Button/ButtonWithTooltip.tsx b/dashboard/origin-mlx/src/components/Button/ButtonWithTooltip.tsx deleted file mode 100644 index b4de30ed..00000000 --- a/dashboard/origin-mlx/src/components/Button/ButtonWithTooltip.tsx +++ /dev/null @@ -1,23 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React from 'react' -import Button from './Button' -import Tooltip from '../Tooltip/Tooltip' - - -function ButtonWithTooltip(props: any) { - const { tooltip, children, ...rest } = props - - return ( - - - - ) -} - -export default ButtonWithTooltip diff --git a/dashboard/origin-mlx/src/components/Button/index.tsx b/dashboard/origin-mlx/src/components/Button/index.tsx deleted file mode 100644 index 0f992ed1..00000000 --- a/dashboard/origin-mlx/src/components/Button/index.tsx +++ /dev/null @@ -1,10 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import Button from './Button' -import ButtonWithTooltip from './ButtonWithTooltip' - -export default Button -export { Button, ButtonWithTooltip } diff --git a/dashboard/origin-mlx/src/components/DataList.tsx b/dashboard/origin-mlx/src/components/DataList.tsx deleted file mode 100644 index 1e679391..00000000 --- a/dashboard/origin-mlx/src/components/DataList.tsx +++ /dev/null @@ -1,48 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import Typography from '@material-ui/core/Typography'; -import DataListItem from './DataListItem'; - -export interface IDataListProps { - title?: string; - titleIcon?: JSX.Element; - items: Array>; -} - -export default function DataList (props: IDataListProps) { - const { title, titleIcon, items } = props; - return ( -
- - { title } { titleIcon } - - {items.map((item: any, i: number) => { - return (React.isValidElement(item)) - ? {item} - : - } - )} -
- ); -} diff --git a/dashboard/origin-mlx/src/components/DataListItem.tsx b/dashboard/origin-mlx/src/components/DataListItem.tsx deleted file mode 100644 index fae6a9bb..00000000 --- a/dashboard/origin-mlx/src/components/DataListItem.tsx +++ /dev/null @@ -1,205 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import Grid from '@material-ui/core/Grid'; -import Typography from '@material-ui/core/Typography'; -import Switch from '@material-ui/core/Switch'; -import FormControlLabel from '@material-ui/core/FormControlLabel'; -import TextField from '@material-ui/core/TextField'; -import Button from '@material-ui/core/Button'; -import Select from '@material-ui/core/Select'; -import LinearProgress from '@material-ui/core/LinearProgress' - -export interface IDataListItemProps { - name?: string; - data?: string; - defaultData?: string; - options?: Array; - savedValue?: string; - thirdColData?: string; - itemClass?: string; - stripUnderscore?: boolean; - capitalizeData?: boolean; - noDividider?: boolean; - handleSelect?: Function; - handleClick?: Function; - handleType?: Function; - saveValue?: Function; - handleFile?: Function; - progress?: number; -} - -export default function DataListItem (props: IDataListItemProps) { - return ( -
- - -
- - { props.name || `` } - -
-
- -
- { buildItem(props) } -
-
- {props.thirdColData && - -
- - { props.thirdColData } - -
-
- } - {props.defaultData && - - -
- default -
-
- -
- { props.defaultData } -
-
-
- } -
-
-
- ); -} - -const buildItem = (props:any) => { - const { name, - itemClass, - data, - options, - savedValue, - handleClick, - handleType, - handleSelect, - saveValue, - handleFile, - progress - } = props; - - if (itemClass === 'model-link') { - return ( - - - { data || `` } - - - ) - } else if (itemClass === 'drop-down') { - return ( - - ) - } else if (itemClass === 'toggle-switch') { - return ( - - } - label={String(data)} - /> - ) - } else if (itemClass === 'text-input') { - return ( - - - { data !== savedValue && - - } - - ) - } else if (itemClass === 'file-button') { - if (!progress && progress !== 0) { - return ( -
- - -
- ) - } - else { - return ( - <> - - {`${Math.round( - progress, - )}%`} - - ) - } - } else if (itemClass === 'button') { - return ( - - ) - } else { - return ( - - { data || `` } - - ) - } -} diff --git a/dashboard/origin-mlx/src/components/Detail/ComponentDetail.tsx b/dashboard/origin-mlx/src/components/Detail/ComponentDetail.tsx deleted file mode 100644 index 1c49331f..00000000 --- a/dashboard/origin-mlx/src/components/Detail/ComponentDetail.tsx +++ /dev/null @@ -1,192 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import StoreContext from '../../lib/stores/context' -import { getUserInfo, hasRole } from '../../lib/util'; - -import Grid from '@material-ui/core/Grid' -import SourceCodeDisplay from '../SourceCodeDisplay' -import RunView from '../RunView' -import LoadingMessage from '../LoadingMessage' -import MetadataView from '../MetadataView' -import Tabs from '@material-ui/core/Tabs' -import Tab from '@material-ui/core/Tab' -import Typography from '@material-ui/core/Typography' - -const isAdmin = hasRole(getUserInfo(), 'admin'); - -export interface ComponentDetailProps { - setRunLink?: Function - id?: string - asset?: any -} - -export interface ComponentDetailState { - component: { - template: any, - yaml: string, - [props: string]: any - } - leftTab: string - rightTab: string -} - -function purifyData(data: any, defaultString: string): string { - if (typeof data === "string") - return data - return defaultString -} - -export default class ComponentDetail extends React.Component { - static contextType = StoreContext - - constructor(props: any) { - super(props); - this.state = { - rightTab: 'source', - leftTab: 'detail', - component: props.asset, - } - } - - async componentDidMount() { - const { store } = this.context - const { api } = store.settings.endpoints - const API = api.value || api.default - - const component = this.state.component - const codeRes = await fetch(`${API}/apis/v1alpha1/components/${component.id}/generate_code`); - - this.setState({ - component: { - ...component, - code: (await codeRes.json()).script - } - }) - } - - public render() { - const { store } = this.context - const { execute } = store.settings.capabilities - const canRun = execute.value !== null ? execute.value : execute.default - const setRunLink = this.props.setRunLink - - const component = this.state.component - - return ( - - - -
- this.setState({ leftTab })}> - - {canRun && isAdmin && - - } - -
- {this.state.leftTab === 'detail' && - - - { - purifyData(component.template.implementation.container.command, 'python ') - } - - {(component.template.implementation.container.args || []).map((arg: any, i: number) => - (typeof arg === 'string') - ? - {arg + ' '} - - : - - {(arg.inputValue || arg.outputPath) + ' '} - - - )} -
- , - { name: 'command', description: purifyData(component.template.implementation.container.command, 'python ') }, - { name: 'image', description: purifyData(component.template.implementation.container.image, "") } - ] - }} - /> - } - { this.state.leftTab === 'runCreation' && - - } - - -
- this.setState({ rightTab })}> - - - -
- {this.state.rightTab === "source" && - } - {this.state.rightTab === 'sample' && (!component.code - ? - : - )} -
- - ); - } -} diff --git a/dashboard/origin-mlx/src/components/Detail/DatasetDetail.tsx b/dashboard/origin-mlx/src/components/Detail/DatasetDetail.tsx deleted file mode 100644 index 4c8553a3..00000000 --- a/dashboard/origin-mlx/src/components/Detail/DatasetDetail.tsx +++ /dev/null @@ -1,139 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import StoreContext from '../../lib/stores/context' - -import SourceCodeDisplay from '../SourceCodeDisplay'; -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; -import yaml from 'js-yaml'; -import { getUserInfo, hasRole } from '../../lib/util'; -import RunView from '../RunView' -import RelatedAssetView from '../RelatedAssetView'; -import MarkdownViewer from '../MarkdownViewer'; -import MetadataView from '../MetadataView'; - -const isAdmin = hasRole(getUserInfo(), 'admin'); - -export interface IPipelineDetailProps { - setRunLink?: Function - name?: string - asset?: any -} - -export default class PipelineDetail extends React.Component { - static contextType = StoreContext - - constructor(props: any) { - super(props); - this.state = { - rightTab: 'source', - leftTab: 'description', - selectedGraphNode: '', - dataset: props.asset - } - } - - getComponentYAML = (name:string) => { - const nodeCode = this.state.pipeline.template.spec.templates - .find((container:any) => - container.name.includes(name.slice(0, name.length - (name.includes('...') && 3)))) - return yaml.safeDump(nodeCode) - } - - public render() { - const { store } = this.context - const { execute } = store.settings.capabilities - const canRun = execute.value !== null ? execute.value : execute.default - - const dataset = this.state.dataset - const setRunLink = this.props.setRunLink - - return ( -
- this.setState({ leftTab })}> - - - { this.state.selectedGraphNode && - - } - {canRun && isAdmin && - - } - { dataset.related_assets && dataset.related_assets.length !== 0 && - - } - -
- { this.state.leftTab === 'description' && ((dataset.template && dataset.template.readme_url) - ? - : - )} - { this.state.leftTab === 'relatedAssets' && - - } - {this.state.leftTab === 'runCreation' && - - } - { this.state.leftTab === "source" && - - } - { this.state.leftTab === "component-code" && - - } -
-
- ) - } -} diff --git a/dashboard/origin-mlx/src/components/Detail/KFServingDetail.tsx b/dashboard/origin-mlx/src/components/Detail/KFServingDetail.tsx deleted file mode 100644 index 0a82fcd4..00000000 --- a/dashboard/origin-mlx/src/components/Detail/KFServingDetail.tsx +++ /dev/null @@ -1,417 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import StoreContext from '../../lib/stores/context' -import { capitalize, getUserInfo, hasRole } from '../../lib/util' - -import Grid from '@material-ui/core/Grid'; -import SourceCodeDisplay from '../SourceCodeDisplay'; -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; -import yaml from 'js-yaml'; -import CheckCircleIcon from '@material-ui/icons/CheckCircle'; -import ErrorIcon from '@material-ui/icons/Error'; -//import errorIcon from '../../images/error.png' -import closeButton from '../../images/close.png' -import updateIcon from '../../images/update-icon.png' - -import Typography from '@material-ui/core/Typography'; -import Button from '../../components/Button' -import Icon from '@material-ui/core/Icon' -import { upload } from '../../lib/api/upload' - -import MetadataView from '../MetadataView'; - -import Popup from "reactjs-popup"; - -const isAdmin = hasRole(getUserInfo(), 'admin'); - -export interface KFServingDetailProps { - API?: string - namespace?: string - setRunLink?: Function - name?: string - asset?: any -} - -export interface KFServingDetailState { - file?: File - uploadStatus?: string - topTab: string - leftTab: string - rightTab: string - codeTab: string - service: { - template: any, - yaml: string, - [props: string]: any - }, - isOpen: boolean - -} - -export default class KFServingDetail extends React.Component { - static contextType = StoreContext - - constructor(props: any) { - super(props); - this.state = { - topTab: 'info', - rightTab: 'source', - leftTab: 'detail', - codeTab: '', - service: props.asset, - isOpen: false - }; - } - - getCodeType = (tab:string) => { - switch (tab) { - case 'serve': - return this.state.service.servable_tested_platforms - case 'train': - return this.state.service.trainable_tested_platforms - default: - return [''] - } - } - - getCode = (platform: string) => - this.state.service.code - .find(({ execution_platform }: any) => - execution_platform === platform).script_code - - public render() { - - const API = this.props.API || "" - const namespace = this.props.namespace || "" - const service = this.state.service - console.log("Asset:") - console.log(this.props.asset) - - const handleFile = (e: React.ChangeEvent) => { - this.setState({...this.state, file: e.currentTarget.files[0]}) - } - - const handleUpload = async () => { - - const file = this.state.file - const response = await upload(API, 'inferenceservice', file, {}) - let uploadStatus = "" - if (response.status < 200 || response.status >= 300) { - uploadStatus = "Upload of " + file.name + " failed" - } - else{ - uploadStatus = "Upload Suceeded." - } - - this.setState({...this.state, uploadStatus, file: null}) - } - - /////////////KIALI/////////////// - const kiali = `http${process.env.HTTPS ? 's' : ""}://${process.env.REACT_APP_KIALI}` - const grafana = `http${process.env.HTTPS ? 's' : ""}://${process.env.REACT_APP_GRAFANA}` - const kialiLink = `${kiali}/kiali/console/services?duration=60&namespaces=${namespace}&servicename=` + service.metadata.name + "&kiosk=true" - const graphLink = `${kiali}/kiali/console/graph/namespaces/?edges=requestsPercentage&graphType=service&namespaces=${namespace}&unusedNodes=false&injectServiceNodes=true&duration=21600&refresh=10000&layout=dagre&kiosk=true` - const grafanaLink = `${grafana}/d/UbsSZTDik/istio-workload-dashboard?orgId=1&var-namespace=${namespace}&var-workload=` + service.metadata.name + `-deployment&var-srcns=All&var-srcwl=All&var-dstsvc=All` - - /////////////PREDICTOR///////////// - let predictorStatusIcon = - let predictorTimestamp = "" - let predictorHost = "" - - /////////////EXPLAINER///////////// - let explainerStatusIcon = - let explainerTimestamp = "" - let explainerHost = "" - //let explainerErrorIcon = "" - let explainerReason = "" - let explainerMessage = "" - //let explainerSeverity = "" - - - /////////////TRANSFORMER///////////// - let transformerStatusIcon = - let transformerTimestamp = "" - let transformerHost = "" - //let transformerErrorIcon = "" - let transformerReason = "" - let transformerMessage = "" - //let transformerSeverity = "" - - - if (service.status?.condition) { - for (let conditionIter=0; conditionIter - } - } - } - - for (let conditionIter=0; conditionIter - explainerHost = service.status.default.transformer?.host || service.status.default.explainer.host - } - else { - //explainerErrorIcon = errorIcon - explainerReason = condition.reason - explainerMessage = condition.message - //explainerSeverity = condition.severity - } - } - } - - for (let i=0; i - transformerHost = service.status.default.transformer.host - } - else { - //transformerErrorIcon = errorIcon - transformerReason = service.status.conditions[i].reason - transformerMessage = service.status.conditions[i].message - //transformerSeverity = service.status.conditions[i].severity - } - } - } - } - else { - predictorTimestamp = service.metadata.creationTimestamp - predictorStatusIcon = service.status.activeModelState === "Ready" - ? - : - } - - return ( - <> - this.setState({ topTab: value })} - > - - - - - - { this.state.topTab === "info" && - - -
- this.setState({ leftTab: value })}> - - -
- {this.state.leftTab === 'detail' && -
- -
- - Configure KFServices - -
-
- { isAdmin && (!this.state.file ? - <> - - -

{this.state.uploadStatus}

- - : - <> - -

{this.state.file.name}

- - )} -
- { predictorTimestamp && - - } - { explainerTimestamp && - - } - { transformerTimestamp && - - } -
- } - {/* Temporarily remove for first pass (using 'false && ') */} - { false && - UPDATE SERVICE} position="top center" contentStyle={{ marginTop: '30px', marginLeft: '300px', width: '1165px', height: '670px', zIndex: 100, opacity: 1, boxShadow: '0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19)', borderWidth: '5px', borderColor: '#1BCDC7' }} arrow={false}> -
- - close button - -
-
- } -
- -
- this.setState({ - rightTab: value, - codeTab: this.getCodeType(value)[0] - })} - > - - -
- { (this.state.rightTab === "train" || this.state.rightTab === "serve") && -
- this.setState({ codeTab: value })} - > - {this.getCodeType(this.state.rightTab).map((platform: string) => - - )} - -
- } - {this.state.rightTab === "source" && - - } -
-
- } - { this.state.topTab === "kiali" && - - } - { this.state.topTab === "grafana" && - - } - { this.state.topTab === "graph" && - - } - - ) - } -} diff --git a/dashboard/origin-mlx/src/components/Detail/ModelDetail.tsx b/dashboard/origin-mlx/src/components/Detail/ModelDetail.tsx deleted file mode 100644 index 3288c104..00000000 --- a/dashboard/origin-mlx/src/components/Detail/ModelDetail.tsx +++ /dev/null @@ -1,238 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import StoreContext from '../../lib/stores/context' -import { capitalize, getUserInfo, hasRole } from '../../lib/util' - -import LoadingMessage from '../LoadingMessage'; -import ModelRunForm from '../RunView/ModelRunView'; -import SourceCodeDisplay from '../SourceCodeDisplay'; -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; -import MetadataView from '../MetadataView'; -import MarkdownViewer from '../MarkdownViewer'; - -const isAdmin = hasRole(getUserInfo(), 'admin'); - -export interface ModelDetailProps { - setRunLink?: Function - name?: string - asset?: any -} - -export interface ModelDetailState { - leftTab: string - rightTab: string - codeTab: string - model: { - template: any, - yaml: string, - [props: string]: any - } -} - -export default class ModelDetail extends React.Component { - static contextType = StoreContext - - constructor(props: any) { - super(props); - this.state = { - rightTab: 'source', - leftTab: 'description', - codeTab: 'kubernetes', - model: props.asset, - }; - } - - async componentDidMount() { - const { store } = this.context - const { api } = store.settings.endpoints - const API = api.value || api.default - - const model = this.state.model - - const codeRes = await fetch(`${API}/apis/v1alpha1/models/${model.id}/generate_code`) - - this.setState({ - model: { ...model, code: (await codeRes.json()).scripts, } - }) - } - - getCodeType = (tab:string) => { - switch (tab) { - case 'serve': - return this.state.model.servable_tested_platforms - case 'train': - return this.state.model.trainable_tested_platforms - default: - return [''] - } - } - - getCode = (platform: string) => - (this.state.model.code - .find(({ execution_platform }: any) => - execution_platform === platform - ) || {}).script_code - - public render() { - const { store } = this.context - const { api, kfp } = store.settings.endpoints - const API = api.value || api.default - const KFP = kfp.value || kfp.default - const { execute } = store.settings.capabilities - const canRun = execute.value !== null ? execute.value : execute.default - const setRunLink = this.props.setRunLink - - const model = this.state.model - - const showCode = this.state.leftTab === 'serve' || this.state.leftTab === 'train' - - return ( -
- this.setState({ leftTab: value })} - > - - {canRun && isAdmin && - - } - - {model.servable && - - } - {model.trainable && - - } - -
- { this.state.leftTab === 'description' && ((model.template && model.template.readme_url) - ? - : name).join(`, `) - }, - { - name: "container image", - data: String(model.template.serving.serving_container_image.container_image_url) - }, - ], - 'Training Details': model.isTrainable && [ - { - name: "tested platforms", - data: model.template.training.tested_platforms.map((name:string)=>name).join(`, `) - }, - model.template.training.training_container_image && { - name: "container image", - data: model.template.training.training_container_image ? model.template.training.training_container_image.container_image_url : `` - }, - { - name: "execution command", - data: model.template.training.execution.command - }, - ] - }}/> - )} - {this.state.leftTab === 'runCreation' && - - } - {/* BEGIN: second tab row */} - {showCode && -
- this.setState({ codeTab: value })} - > - {this.getCodeType(this.state.leftTab).filter((platform : string) => platform !== "knative").map((platform: string) => - - )} - -
- } - {/* END: second tab row */} - - {this.state.leftTab === "source" && - - } - {this.state.leftTab === 'serve' && (!model.code - ? - : - )} -
-
- ) - } -} diff --git a/dashboard/origin-mlx/src/components/Detail/NotebookDetail.tsx b/dashboard/origin-mlx/src/components/Detail/NotebookDetail.tsx deleted file mode 100644 index a102e34c..00000000 --- a/dashboard/origin-mlx/src/components/Detail/NotebookDetail.tsx +++ /dev/null @@ -1,163 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import StoreContext from '../../lib/stores/context' -import { getUserInfo, hasRole } from '../../lib/util' - -import DataList from '../DataList'; -import Grid from '@material-ui/core/Grid'; -import SourceCodeDisplay from '../SourceCodeDisplay'; -import RunView from '../RunView' -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; - -const isAdmin = hasRole(getUserInfo(), 'admin'); - -export interface INotebookDetailProps { - setRunLink?: Function - name?: string - asset?: any -} - -export interface NotebookDetailState { - notebook: { - url: string - template: any, - yaml: string, - [props: string]: any - } - leftTab: string; - rightTab: string; -} - -export default class NotebookDetail extends React.Component { - static contextType = StoreContext - - constructor(props: any) { - super(props); - this.state = { - rightTab: 'source', - leftTab: 'detail', - notebook: props.asset, - } - } - - public render() { - const { store } = this.context - const { execute } = store.settings.capabilities - const canRun = execute.value !== null ? execute.value : execute.default - const setRunLink = this.props.setRunLink - - const notebook = this.state.notebook; - - const viewerUrl = notebook.url && - `${notebook.url.includes('github.com') - ? 'https://nbviewer.jupyter.org/url/' - : 'http://' + process.env.REACT_APP_NBVIEWER_API + '/url/'}` - + notebook.url.match(/https?:\/\/(.*)/)[1] - - return ( - - -
- this.setState({ leftTab })}> - - {canRun && isAdmin && - - } - -
- { this.state.leftTab === 'detail' && -
- - - - -
- } - { this.state.leftTab === 'runCreation' && - } -
- -
- this.setState({ rightTab })} - > - - {viewerUrl && - - } - -
- {this.state.rightTab === 'source' && - - } - {this.state.rightTab === 'notebook' && - } -
-
- ); - } -} diff --git a/dashboard/origin-mlx/src/components/Detail/OperatorDetail.tsx b/dashboard/origin-mlx/src/components/Detail/OperatorDetail.tsx deleted file mode 100644 index a0e4877d..00000000 --- a/dashboard/origin-mlx/src/components/Detail/OperatorDetail.tsx +++ /dev/null @@ -1,134 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import StoreContext from '../../lib/stores/context' -import { getUserInfo, hasRole } from '../../lib/util' - -import Grid from '@material-ui/core/Grid'; -import ReactMarkdown from 'react-markdown'; -import RunView from '../RunView' -import SourceCodeDisplay from '../SourceCodeDisplay'; -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; - -const isAdmin = hasRole(getUserInfo(), 'admin'); - -export interface IOperatorDetailProps { - setRunLink?: Function - name?: string - asset?: any -} - -export interface OperatorDetailState { - operator: { - templates: { - [kind: string]: { raw: string, template: any, url: string } - }[], - [props: string]: any - } - leftTab: string - rightTab: string -} - -export default class OperatorDetail extends React.Component { - static contextType = StoreContext - - constructor(props: any) { - super(props); - this.state = { - rightTab: 'Definition', - leftTab: 'detail', - operator: props.asset, - } - } - - public render() { - const { store } = this.context - const { execute } = store.settings.capabilities - const canRun = execute.value !== null ? execute.value : execute.default - - const operator = this.state.operator - const setRunLink = this.props.setRunLink - - return ( - - - -
- this.setState({ leftTab: value })}> - - {canRun && isAdmin && - - } - -
- {this.state.leftTab === 'detail' && -
- -
- } - {this.state.leftTab === 'runCreation' && - } -
- -
- this.setState({ rightTab: value })} - > - - - - -
- {Object.entries(operator.templates).filter(([ name, _ ]: any) => this.state.rightTab === name) - .map(([ name, template ]: any) => - - ) - } -
-
- ) - } -} diff --git a/dashboard/origin-mlx/src/components/Detail/PipelineDetail.tsx b/dashboard/origin-mlx/src/components/Detail/PipelineDetail.tsx deleted file mode 100644 index 28d43620..00000000 --- a/dashboard/origin-mlx/src/components/Detail/PipelineDetail.tsx +++ /dev/null @@ -1,195 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import StoreContext from '../../lib/stores/context' -import { getUserInfo, hasRole } from '../../lib/util' - -import Grid from '@material-ui/core/Grid'; -import LoadingMessage from '../LoadingMessage'; -import RunView from '../RunView' -import SourceCodeDisplay from '../SourceCodeDisplay'; -import Tabs from '@material-ui/core/Tabs'; -import Tab from '@material-ui/core/Tab'; -import yaml from 'js-yaml'; -import MetadataView from '../MetadataView'; - -import Graph from '../Graph'; -import * as StaticGraphParser from '../StaticGraphParser'; - -const isAdmin = hasRole(getUserInfo(), 'admin'); - -export interface IPipelineDetailProps { - setRunLink?: Function - name?: string - asset?: any -} - -export default class PipelineDetail extends React.Component { - static contextType = StoreContext - - constructor(props: any) { - super(props); - this.state = { - rightTab: 'source', - leftTab: 'graph', - selectedGraphNode: '', - pipeline: props.asset - } - } - - setSelectedGraphNode = (name: string) => { - this.setState({ - selectedGraphNode: name, - rightTab: 'component-code' - }); - } - - getGraph = (templates:any) => { - return templates.map((t:any) => t.name) - } - - getComponentYAML = (name:string) => { - const nodeCode = this.state.pipeline.template.spec.templates - .find((container:any) => - container.name.includes(name.slice(0, name.length - (name.includes('...') && 3)))) - return yaml.safeDump(nodeCode) - } - - // getRunButton = () => { - // if (this.props.canRun === true) { - // return "Execute"; - // } else { - // return null; - // } - // } - - // executePipeline = () => { - // const pipeLink = `http://${KFP}/pipeline/#/pipelines/details/${pipeline.id}` - // window.open(pipeLink, '_blank'); - // } - - public render() { - const { store } = this.context - const { execute } = store.settings.capabilities - const canRun = execute.value !== null ? execute.value : execute.default - - const pipeline = this.state.pipeline - const setRunLink = this.props.setRunLink - - const template = yaml.safeLoad(this.props.asset.yaml); - const graph = StaticGraphParser.createGraph(template); - - return ( - - - -
- this.setState({ leftTab })}> - - - {canRun && isAdmin && - - } - -
- { this.state.leftTab === 'detail' && -
- {!pipeline.yaml - ? - : !t.dag) - .map((node:any) => node.name).join(', ')}` - } - ] - }} - /> - } -
- } - { this.state.leftTab === 'graph' && - {}} - onError={() => {}} - /> - } - {this.state.leftTab === 'runCreation' && - } -
- -
- this.setState({ rightTab })}> - - { this.state.selectedGraphNode && - - } - -
- - { this.state.rightTab === "source" && - - } - - { this.state.rightTab === "component-code" && - - } - -
-
- ) - } -} diff --git a/dashboard/origin-mlx/src/components/Graph.tsx b/dashboard/origin-mlx/src/components/Graph.tsx deleted file mode 100644 index 8a64dfa4..00000000 --- a/dashboard/origin-mlx/src/components/Graph.tsx +++ /dev/null @@ -1,413 +0,0 @@ -/* - * Copyright 2018 kubeflow.org - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as dagre from 'dagre'; -import * as React from 'react'; -import { classes, stylesheet } from 'typestyle'; -import { fontsize, color, fonts, zIndex } from '../Css'; -import Tooltip from '@material-ui/core/Tooltip'; - -export const Constants = { - NODE_HEIGHT: 64, - NODE_WIDTH: 172, -}; - -interface Segment { - angle: number; - length: number; - x1: number; - x2: number; - y1: number; - y2: number; -} - -interface Edge { - color?: string; - isPlaceholder?: boolean; - from: string; - segments: Segment[]; - to: string; -} - -const css = stylesheet({ - arrowHead: { - borderColor: color.grey + ' transparent transparent transparent', - borderStyle: 'solid', - borderWidth: '7px 6px 0 6px', - content: `''`, - position: 'absolute', - }, - icon: { - padding: '5px 7px 0px 7px', - }, - label: { - color: color.strong, - flexGrow: 1, - fontFamily: fonts.secondary, - fontSize: 13, - fontWeight: 500, - lineHeight: '16px', - overflow: 'hidden', - padding: 10, - textOverflow: 'ellipsis', - whiteSpace: 'nowrap', - }, - line: { - position: 'absolute', - }, - node: { - $nest: { - '&:hover': { - borderColor: color.theme, - }, - }, - backgroundColor: color.background, - border: 'solid 1px #d6d6d6', - borderRadius: 3, - boxSizing: 'content-box', - color: '#124aa4', - cursor: 'pointer', - display: 'flex', - fontSize: fontsize.medium, - margin: 10, - position: 'absolute', - zIndex: zIndex.GRAPH_NODE, - }, - nodeSelected: { - border: `solid 2px ${color.theme}`, - }, - placeholderNode: { - margin: 10, - position: 'absolute', - // TODO: can this be calculated? - transform: 'translate(71px, 14px)', - }, - root: { - backgroundColor: color.graphBg, - borderLeft: 'solid 1px ' + color.divider, - flexGrow: 1, - overflow: 'auto', - position: 'relative', - }, -}); - -interface GraphProps { - graph: dagre.graphlib.Graph; - onClick?: (id: string) => void; - selectedNodeId?: string; -} - -interface GraphState { - hoveredNode?: string; -} - -interface GraphErrorBoundaryProps { - onError?: (message: string, additionalInfo: string) => void; -} -class GraphErrorBoundary extends React.Component { - state = { - hasError: false, - }; - - componentDidCatch(error: Error): void { - const message = 'There was an error rendering the graph.'; - const additionalInfo = `${message} This is likely a bug in Kubeflow Pipelines. Error message: '${error.message}'.`; - if (this.props.onError) { - this.props.onError(message, additionalInfo); - } - this.setState({ - hasError: true, - }); - } - - render() { - return this.state.hasError ?
: this.props.children; - } -} - -export class Graph extends React.Component { - private LEFT_OFFSET = 100; - private TOP_OFFSET = 44; - private EDGE_THICKNESS = 2; - private EDGE_X_BUFFER = Math.round(Constants.NODE_WIDTH / 6); - - constructor(props: any) { - super(props); - - this.state = {}; - } - - public render(): JSX.Element | null { - const { graph } = this.props; - - if (!graph.nodes().length) { - return null; - } - - dagre.layout(graph); - const displayEdges: Edge[] = []; - - // Creates the lines that constitute the edges connecting the graph. - graph.edges().forEach(edgeInfo => { - const edge = graph.edge(edgeInfo); - const segments: Segment[] = []; - - if (edge.points.length > 1) { - for (let i = 1; i < edge.points.length; i++) { - let xStart = edge.points[i - 1].x; - let yStart = edge.points[i - 1].y; - let xEnd = edge.points[i].x; - let yEnd = edge.points[i].y; - - const downwardPointingSegment = yStart <= yEnd; - - // Adjustments made to the start of the first segment for each edge to ensure that it - // begins at the bottom of the source node and that there are at least EDGE_X_BUFFER - // pixels between it and the right and left side of the node. - // Note that these adjustments may cause edges to overlap with nodes since we are - // deviating from the explicit layout provided by dagre. - if (i === 1) { - const sourceNode = graph.node(edgeInfo.v); - - if (!sourceNode) { - throw new Error(`Graph definition is invalid. Cannot get node by '${edgeInfo.v}'.`); - } - - // Set the edge's first segment to start at the bottom or top of the source node. - yStart = downwardPointingSegment - ? sourceNode.y + sourceNode.height / 2 - 3 - : sourceNode.y - sourceNode.height / 2; - - xStart = this._ensureXIsWithinNode(sourceNode, xStart); - } - - const finalSegment = i === edge.points.length - 1; - - // Adjustments made to the end of the final segment for each edge to ensure that it ends - // at the top of the destination node and that there are at least EDGE_X_BUFFER pixels - // between it and the right and left side of the node. The adjustments are only needed - // when there are multiple inbound edges as dagre seems to always layout a single inbound - // edge so that it terminates at the center-top of the destination node. For this reason, - // placeholder nodes do not need adjustments since they always have only a single inbound - // edge. - // Note that these adjustments may cause edges to overlap with nodes since we are - // deviating from the explicit layout provided by dagre. - if (finalSegment) { - const destinationNode = graph.node(edgeInfo.w); - - // Placeholder nodes never need adjustment because they always have only a single - // incoming edge. - if (!destinationNode.isPlaceholder) { - // Set the edge's final segment to terminate at the top or bottom of the destination - // node. - yEnd = downwardPointingSegment - ? destinationNode.y - this.TOP_OFFSET + 5 - : destinationNode.y + destinationNode.height / 2 + 3; - - xEnd = this._ensureXIsWithinNode(destinationNode, xEnd); - } - } - - // For the final segment of the edge, if the segment is diagonal, split it into a diagonal - // and a vertical piece so that all edges terminate with a vertical segment. - if (finalSegment && xStart !== xEnd) { - const yHalf = (yStart + yEnd) / 2; - this._addDiagonalSegment(segments, xStart, yStart, xEnd, yHalf); - - // Vertical segment - if (downwardPointingSegment) { - segments.push({ - angle: 270, - length: yEnd - yHalf, - x1: xEnd - 5, - x2: xEnd, - y1: yHalf + 4, - y2: yEnd, - }); - } else { - segments.push({ - angle: 90, - length: yHalf - yEnd, - x1: xEnd - 5, - x2: xEnd, - y1: yHalf - 4, - y2: yEnd, - }); - } - } else { - this._addDiagonalSegment(segments, xStart, yStart, xEnd, yEnd); - } - } - } - displayEdges.push({ - color: edge.color, - from: edgeInfo.v, - isPlaceholder: edge.isPlaceholder, - segments, - to: edgeInfo.w, - }); - }); - - const { hoveredNode } = this.state; - const highlightNode = this.props.selectedNodeId || hoveredNode; - - return ( -
- {graph - .nodes() - .map(id => Object.assign(graph.node(id), { id })) - .map((node, i) => ( -
{ - if (!this.props.selectedNodeId) { - this.setState({ hoveredNode: node.id }); - } - }} - onMouseLeave={() => { - if (this.state.hoveredNode === node.id) { - this.setState({ hoveredNode: undefined }); - } - }} - onClick={() => - !node.isPlaceholder && this.props.onClick && this.props.onClick(node.id) - } - style={{ - backgroundColor: node.bgColor, - left: node.x, - maxHeight: node.height, - minHeight: node.height, - top: node.y, - transition: 'left 0.5s, top 0.5s', - width: node.width, - }} - > - {!node.isPlaceholder && ( - -
{node.label}
-
- )} -
- {node.icon} -
-
- ))} - - {displayEdges.map((edge, i) => { - const edgeColor = this._getEdgeColor(edge, highlightNode); - const lastSegment = edge.segments[edge.segments.length - 1]; - return ( -
- {edge.segments.map((segment, l) => ( -
- ))} - {/* Arrowhead */} - {!edge.isPlaceholder && lastSegment.x2 !== undefined && lastSegment.y2 !== undefined && ( -
- )} -
- ); - })} -
- ); - } - - private _addDiagonalSegment( - segments: Segment[], - xStart: number, - yStart: number, - xEnd: number, - yEnd: number, - ): void { - const xMid = (xStart + xEnd) / 2; - // The + 0.5 at the end of 'length' helps fill out the elbows of the edges. - const length = Math.sqrt(Math.pow(xStart - xEnd, 2) + Math.pow(yStart - yEnd, 2)) + 0.5; - const x1 = xMid - length / 2; - const y1 = (yStart + yEnd) / 2; - const angle = (Math.atan2(yStart - yEnd, xStart - xEnd) * 180) / Math.PI; - segments.push({ - angle, - length, - x1, - x2: xEnd, - y1, - y2: yEnd, - }); - } - - /** - * Adjusts the x positioning of the start or end of an edge so that it is at least EDGE_X_BUFFER - * pixels in from the left and right. - * @param node the node where the edge is originating from or terminating at - * @param originalX the initial x position provided by dagre - */ - private _ensureXIsWithinNode(node: dagre.Node, originalX: number): number { - // If the original X value was too far to the right, move it EDGE_X_BUFFER pixels - // in from the left end of the node. - const rightmostAcceptableLoc = node.x + node.width - this.LEFT_OFFSET - this.EDGE_X_BUFFER; - if (rightmostAcceptableLoc <= originalX) { - return rightmostAcceptableLoc; - } - - // If the original X value was too far to the left, move it EDGE_X_BUFFER pixels - // in from the left end of the node. - const leftmostAcceptableLoc = node.x - this.LEFT_OFFSET + this.EDGE_X_BUFFER; - if (leftmostAcceptableLoc >= originalX) { - return leftmostAcceptableLoc; - } - - return originalX; - } - - private _getEdgeColor(edge: Edge, highlightNode?: string): string { - if (highlightNode) { - if (edge.from === highlightNode) { - return color.theme; - } - if (edge.to === highlightNode) { - return color.themeDarker; - } - } - if (edge.isPlaceholder) { - return color.weak; - } - return color.grey; - } -} - -const EnhancedGraph = (props: GraphProps & GraphErrorBoundaryProps) => ( - - - -); -EnhancedGraph.displayName = 'EnhancedGraph'; - -export default EnhancedGraph; diff --git a/dashboard/origin-mlx/src/components/Hero.tsx b/dashboard/origin-mlx/src/components/Hero.tsx deleted file mode 100644 index 7d5ed034..00000000 --- a/dashboard/origin-mlx/src/components/Hero.tsx +++ /dev/null @@ -1,79 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React, { ReactNode } from 'react'; -import styled from 'styled-components' -import Typography from '@material-ui/core/Typography' - - -interface HeroProps { - title: string - subtitle: string - children?: ReactNode - alternate?: boolean -} - -function Hero(props: HeroProps) { - const { title, subtitle, alternate, children } = props - - return ( - - - {title} - - - { subtitle || "Loading..." } - - {children} - - ) -} - - -const backgrounds = [ - 'https://s3.us.cloud-object-storage.appdomain.cloud/ibmdev/backgrounds/hero_dark.jpg', - 'https://s3.us.cloud-object-storage.appdomain.cloud/ibmdev/backgrounds/hero_dark.jpg' -] - -const Wrapper = styled.div<{ alternate: boolean }>` - background-image: url(${ ({ alternate: alt }) => alt ? backgrounds[0] : backgrounds[1] }); - background-repeat: no-repeat; - background-position: center top; - background-size: cover; - padding: 2rem 0; - - h1 { - font-size: 3.5rem; - } - - h1::first-letter { - text-transform: capitalize; - } - - h1, h2, h3, h4, h5, h6 { - color: #fff; - } -` - -const Container = styled.div` - display: flex; - justify-content: center; - - > * { - margin: 0 8px; - } -` - -export default Hero diff --git a/dashboard/origin-mlx/src/components/Link.tsx b/dashboard/origin-mlx/src/components/Link.tsx deleted file mode 100644 index 1ebdac86..00000000 --- a/dashboard/origin-mlx/src/components/Link.tsx +++ /dev/null @@ -1,19 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React from 'react' -import { Link as RouterLink, LinkProps } from 'react-router-dom' - - -function Link(props: LinkProps) { - const destination = props.to.toString() - const isExternal = /^https?:\/\//.test(destination) - - return isExternal - ? {props.children} - : {props.children} -} - -export default Link diff --git a/dashboard/origin-mlx/src/components/LoadingMessage.tsx b/dashboard/origin-mlx/src/components/LoadingMessage.tsx deleted file mode 100644 index 149e4b31..00000000 --- a/dashboard/origin-mlx/src/components/LoadingMessage.tsx +++ /dev/null @@ -1,38 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import { Typography } from '@material-ui/core'; -import styled from 'styled-components'; - -import Logo from '../icons/codaitLogo' -import Rotate from './Rotate' - -export interface ILoadingMessageProps { - assetType?: string - message?: string -} - -const Wrapper = styled.div` - display: flex; - flex-direction: column; - flex: 1; - width: 100%; - align-items: center; - justify-content: center; -`; - -export default function LoadingMessage (props: ILoadingMessageProps) { - const { assetType, message } = props - return ( - - - - {assetType && `loading ${assetType} metadata...`} - {message && message} - - - ); -} diff --git a/dashboard/origin-mlx/src/components/MarkdownViewer.tsx b/dashboard/origin-mlx/src/components/MarkdownViewer.tsx deleted file mode 100644 index 67f87a0a..00000000 --- a/dashboard/origin-mlx/src/components/MarkdownViewer.tsx +++ /dev/null @@ -1,33 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import ReactMarkdown from 'react-markdown' -import remarkGfm from 'remark-gfm' -import rehypeSlug from 'rehype-slug' - -export default class MarkdownViewer extends React.Component<{url: string}, {terms: any}> { - constructor(props: any) { - super(props) - - this.state = { terms: null } - } - - componentWillMount() { - fetch(this.props.url).then((response) => response.text()).then((text) => { - this.setState({ terms: text }) - }) - } - - render() { - return ( -
- -
- ) - } - } diff --git a/dashboard/origin-mlx/src/components/MetadataView.tsx b/dashboard/origin-mlx/src/components/MetadataView.tsx deleted file mode 100644 index 0afcb9e8..00000000 --- a/dashboard/origin-mlx/src/components/MetadataView.tsx +++ /dev/null @@ -1,43 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React, { ReactNode } from 'react' -import { capitalize } from '../lib/util' - -import DataList from './DataList' - - -interface MetadataViewProps { - content: { - [name: string]: (any | ReactNode)[] - }, - titleIcon?: JSX.Element -} - -function MetadataView(props: MetadataViewProps) { - const { content } = props - - return ( -
- {Object.entries(content).filter(([_, value]) => !!value).map(([ name, data ]) => ( - !!item).map(field => React.isValidElement(field) - ? field - : { - ...field, - data: field.description || field.data, - defaultData: field.default - } - )} - /> - ))} -
- ) -} - -export default MetadataView diff --git a/dashboard/origin-mlx/src/components/PageFooter.tsx b/dashboard/origin-mlx/src/components/PageFooter.tsx deleted file mode 100644 index d429b83d..00000000 --- a/dashboard/origin-mlx/src/components/PageFooter.tsx +++ /dev/null @@ -1,22 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React from 'react'; -import Link from './Link' - -export default function PageFooter() { - return ( -
- Copyright © 2021 Machine Learning eXchange The Linux Foundation®. - All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. - For a list of trademarks of The Linux Foundation, please see our Trademark Usage - page. - Linux is a registered trademark of Linus Torvalds. - Privacy Policy - and - Terms of Use . -
- ) -} \ No newline at end of file diff --git a/dashboard/origin-mlx/src/components/PipelineDetailGraph.tsx b/dashboard/origin-mlx/src/components/PipelineDetailGraph.tsx deleted file mode 100644 index 1f651e54..00000000 --- a/dashboard/origin-mlx/src/components/PipelineDetailGraph.tsx +++ /dev/null @@ -1,272 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import '../styles/Graph.css'; -import dagre from 'dagre'; - -const NODE_WIDTH = 150; -const NODE_HEIGHT = 70; -const CANVAS_WIDTH = 800; -const CANVAS_HEIGHT = 640; -const CANVAS_X_PAD = 100; -const CANVAS_Y_PAD = 60; -const MAX_LABEL_LENGTH = 17; -const LABEL_X_OFFSET = 10; - -export interface IPipelineDetailGraphProps { - selectedNode: string; - entrypoint: string - templates: Array; - handleClick: Function; -} - -export default class PipelineDetailGraph extends React.Component { - canvas: any; - setRef: (element: any) => void; - constructor(props:IPipelineDetailGraphProps) { - super(props); - this.canvas = null; - - this.setRef = element => { - this.canvas = element; - }; - this.state = { - graphWidth: 0, - graphHeight: 0, - nodeRects: [], - hoverNode: '', - activeNode: '', - hoverState: false, - selectedNode: props.selectedNode - } - } - - componentDidMount() { - let canvas = this.canvas as HTMLCanvasElement; - const ctx = canvas.getContext('2d'); - const graph = this.buildGraph(this.props.entrypoint, this.props.templates); - const { graphWidth, graphHeight } = this.getGraphDims(graph) - canvas.width = graphWidth + CANVAS_X_PAD - canvas.height = graphHeight + CANVAS_Y_PAD - - // DRAW NODES - let nodeList:any = []; - graph.nodes().forEach((name: string) => { - const node = graph.node(name) - - ctx.lineWidth = 1.5; - ctx.strokeStyle = "slategray"; - ctx.fillStyle = "#ddd"; - ctx.font = "12px Arial"; - - const label = node.label - const labelWidth = Math.round(ctx.measureText(label).width); - - let nodeRect = { - x: node.x - (NODE_WIDTH / 2), - y: node.y - (NODE_HEIGHT / 2), - width: NODE_WIDTH, - height: NODE_HEIGHT, - label - } - - // const extraPadPerSide = (nodeRect.width - labelWidth - LABEL_X_OFFSET) / 2; - - ctx.fillRect(nodeRect.x, nodeRect.y, nodeRect.width, nodeRect.height); - ctx.strokeRect(nodeRect.x, nodeRect.y, nodeRect.width, nodeRect.height); - ctx.fillStyle = "black"; - ctx.fillText(label, node.x - (NODE_WIDTH / 2) + LABEL_X_OFFSET, node.y); - nodeList.push(nodeRect) - }) - - this.setState({ - nodeRects: nodeList - }) - - // DRAW EDGES - graph.edges().forEach(function(e:any) { - const edge = graph.edge(e); - //console.log("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge)); - ctx.strokeStyle = "lightslategray"; - ctx.lineWidth = 2; - ctx.beginPath(); - ctx.lineJoin = 'bevel'; - - const [ start, ...rest ] = edge.points - ctx.moveTo(start.x, start.y) - rest.forEach((point: any) => ctx.lineTo(point.x, point.y)) - ctx.stroke(); - - const lastBegin = edge.points[edge.points.length - 2] - const lastEnd = edge.points[edge.points.length - 1] - - arrow(ctx, lastBegin, lastEnd, 7) - }); - - // working on interactivity / hover action - canvas.onmousemove = ((e:any) => { - let rect = canvas.getBoundingClientRect(), - mouseX = e.clientX - rect.left, - mouseY = e.clientY - rect.top, - i = 0, r; - // console.log({x, y}) - this.state.nodeRects.forEach((rect:any, i:number) => { - if (this.inRect(mouseX, mouseY, rect)) { - this.highlightNode(i, 'hover'); - } else if (this.props.selectedNode === rect.label) { - this.highlightNode(i, 'selected') - } else { - this.highlightNode(i, 'none'); - } - }) - }) - - canvas.onclick = ((e: any) => { - let rect = canvas.getBoundingClientRect(), - mouseX = e.clientX - rect.left, - mouseY = e.clientY - rect.top, - i = 0, r; - // console.log({x, y}) - this.state.nodeRects.forEach((rect:any, i:number) => { - if (this.inRect(mouseX, mouseY, rect)) { - this.props.handleClick(rect.label) - return - } - }) - }) - - canvas.onchange = (e:any) => { - console.log(this.props.selectedNode) - } - } - - inRect = (mouseX: number, mouseY: number, rect: any) => - (mouseX >= rect.x && mouseX <= rect.x+rect.width) && (mouseY >= rect.y && mouseY <= rect.y+rect.height) - - highlightNode = (nodeID: number, state: string) => { - const node = this.state.nodeRects[nodeID]; - let canvas = this.canvas as HTMLCanvasElement; - const ctx = canvas.getContext('2d'); - - ctx.lineWidth = 1.5; - if (state === 'hover') { - ctx.strokeStyle = "turquoise"; - } else if (state === 'selected') { - ctx.strokeStyle = 'darkturquoise'; - } else { - ctx.strokeStyle = 'lightslategray'; - } - ctx.strokeRect(node.x, node.y, node.width, node.height); - } - - getGraphDims = (graph:any) => { - const xs = Object.values(graph._nodes).map((node:any) => node.x) - const graphXMax = Math.max(...xs) + (0.5 * NODE_WIDTH) - const graphXMin = Math.min(...xs) - (0.5 * NODE_WIDTH) - - const ys = Object.values(graph._nodes).map((node:any) => node.y) - const graphYMax = Math.max(...ys) + (0.5 * NODE_HEIGHT) - const graphYMin = Math.min(...ys) - (0.5 * NODE_HEIGHT) - - return { - graphWidth: graphXMax - graphXMin, - graphHeight: graphYMax - graphYMin - } - } - - buildGraph = (entrypoint: string, templates: any[]) => { - const dagNodes = this.props.templates.filter((t:any) => { - return t.hasOwnProperty('dag') - }) - - let nonDagNodes = this.props.templates.filter((t:any) => { - return !t.hasOwnProperty('dag') - }).map(node=>node.name) - - // create a new directed graph - const g = new dagre.graphlib.Graph() - .setGraph({}) - .setDefaultEdgeLabel(function() { return {}; }); - - if (dagNodes) { - dagNodes.forEach((node:any) => { - node.dag.tasks.forEach((task:any) => { - // shorten long labels - const label = task.name.length > MAX_LABEL_LENGTH ? - task.name.substring(0, MAX_LABEL_LENGTH) + '...' : task.name - - if (task.hasOwnProperty('dependencies')) { - // add node - g.setNode(task.name, { label, width: NODE_WIDTH, height: NODE_HEIGHT }); - nonDagNodes.push(task.name) - - // add edges - task.dependencies.forEach((dep:any) => { - g.setEdge(dep, task.name); - }) - } else { - g.setNode(task.name, { label, width: NODE_WIDTH, height: NODE_HEIGHT }); - } - }) - }) - - // catch deeper dependencies - dagNodes.forEach((node:any) => { - node.dag.tasks.forEach((task:any) => { - if (task.hasOwnProperty('arguments') && node.hasOwnProperty('name')) { - const target = node.dag.tasks.filter((t:any) => !t.hasOwnProperty('dependencies')) - if (g.nodes().includes(target[0].template) && nonDagNodes.includes(node.name)) { - g.setEdge(node.name, target[0].template) - console.log(`${node.name} connects to ${target[0].template}`) - } - } - }) - }) - } - dagre.layout(g); - return g; - } - - public render() { - return ( - <> -
- -
- - ); - } -} - -function arrow (ctx: any, p1: any, p2: any, size: number) { - var angle = Math.atan2((p2.y - p1.y) , (p2.x - p1.x)); - var hyp = Math.sqrt((p2.x - p1.x) * (p2.x - p1.x) + (p2.y - p1.y) * (p2.y - p1.y)); - - ctx.save(); - ctx.translate(p1.x, p1.y); - ctx.rotate(angle); - - // line - ctx.beginPath(); - ctx.moveTo(0, 0); - ctx.lineTo(hyp - size, 0); - ctx.stroke(); - - // triangle - ctx.fillStyle = '#4d4d4d'; - ctx.beginPath(); - ctx.lineTo(hyp - size, size); - ctx.lineTo(hyp, 0); - ctx.lineTo(hyp - size, -size); - ctx.fill(); - - ctx.restore(); -} diff --git a/dashboard/origin-mlx/src/components/RelatedAssetView.tsx b/dashboard/origin-mlx/src/components/RelatedAssetView.tsx deleted file mode 100644 index abfc63de..00000000 --- a/dashboard/origin-mlx/src/components/RelatedAssetView.tsx +++ /dev/null @@ -1,134 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React, { useContext, FormEvent, ChangeEvent, useState } from 'react' -import StoreContext from '../lib/stores/context' - -import { requestArtifactRun } from '../lib/api/run'; -import TextField from '@material-ui/core/TextField' -import Button from './Button' - -interface RelatedAssetsProps { - datasetId: string; - relatedAssets: string[]; - setRunLink?: Function; -} - -interface NotebookRunParams { - [name:string]: { - runname:string, - dataset_pvc:string, - mount_path:string - } -} - -function RelatedAssetView(props: RelatedAssetsProps){ - - const { store } = useContext(StoreContext) - const { api, kfp } = store.settings.endpoints - const API = api.value ? api.value : api.default - const KFP = kfp.value ? kfp.value : kfp.default - const setRunLink = props.setRunLink - - const initRun : NotebookRunParams = {} - props.relatedAssets.forEach((relatedAsset: string) => { - initRun[relatedAsset] = { - runname: "", - dataset_pvc: "", - mount_path: "" - } - }) - - const [ run, setRun ] = useState(initRun) - - function handleClick(asset: string) { - const payload = { - "name": run[asset].runname, - "dataset_pvc": run[asset].dataset_pvc, - "mount_path": run[asset].mount_path - } - const typeIdSplit = asset.split('/'); - - return ((event: FormEvent) => { - - requestArtifactRun(API, typeIdSplit[0], typeIdSplit[1], payload) - .then(({ run_url })=> { - setRunLink(`${KFP}/pipeline/#` + run_url) - }) - }) - } - - return ( -
-
-

Related Assets

- { props.relatedAssets.map((relatedAsset: any) => { - return ( -
-

{relatedAsset}

-
- ) => - setRun({ ...run, [relatedAsset]: {...run[relatedAsset], runname: e.currentTarget.value} })} - /> - ) => - setRun({ ...run, [relatedAsset]: {...run[relatedAsset], dataset_pvc: e.currentTarget.value} })} - /> - ) => - setRun({ ...run, [relatedAsset]: {...run[relatedAsset], mount_path: e.currentTarget.value} })} - /> - -
-
- ) - }) - } -
-
- ) -} - -export default RelatedAssetView diff --git a/dashboard/origin-mlx/src/components/Rotate.tsx b/dashboard/origin-mlx/src/components/Rotate.tsx deleted file mode 100644 index 4259b2a0..00000000 --- a/dashboard/origin-mlx/src/components/Rotate.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import styled, { keyframes } from 'styled-components' - -const rotate = keyframes` - from { - transform: rotate(0deg); - } - - to { - transform: rotate(360deg); - } -`; - -interface RotateProps { - readonly period: string -} - -const Rotate = styled.div` - display: inline-block; - animation: ${rotate} ${props => props.period} linear infinite; - vertical-align: middle; - flex-shrink: 0; - clip-path: circle(40px at center); -`; - -export default Rotate diff --git a/dashboard/origin-mlx/src/components/RunView/ModelRunView.tsx b/dashboard/origin-mlx/src/components/RunView/ModelRunView.tsx deleted file mode 100644 index bbcd0e05..00000000 --- a/dashboard/origin-mlx/src/components/RunView/ModelRunView.tsx +++ /dev/null @@ -1,313 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React from 'react'; -import TextField from '@material-ui/core/TextField'; -import Button from '@material-ui/core/Button'; -import MenuItem from '@material-ui/core/MenuItem'; - -const capitalized = (inputString:string) => inputString.split("").map((ltr, pos) => pos === 0 ? ltr.toUpperCase() : ltr).join(""); - -interface ModelRunFormProps { - id: string - servableCredentialsRequired: boolean - trainableCredentialsRequired: boolean - trainingPlatforms: Array - servingPlatforms: Array; - inputParameters: {[key: string]: string}[]; - urlParameters: {[key: string]: string} - KFP: string - API: string - setRunLink?: Function -} - -export default class ModelRunForm extends React.Component { - - constructor(props:any) { - super(props); - - var shownParams: {[key: string]: {description: string, value: string}} = {} - var matchedUrlParams: {[key: string]: string} = {} - var matches: string[] = [] - - // Adds all parameters that don't already have a value (from the url) - // to list of parameters which we will ask the user for - if (props.inputParameters) { - for(var yamlParamIter = 0; yamlParamIter < props.inputParameters.length; yamlParamIter++) { - let hasMatch = false - let curParam = props.inputParameters[yamlParamIter] - Object.keys(props.urlParameters).forEach((key: string) => { - if (key === curParam.name) - hasMatch = true - }) - // If there is no matching url_parameter add the parameter to the form - if (!hasMatch) - shownParams[curParam.name] = {description: curParam.description, value: curParam.default} - else - matches.push(curParam.name) - } - } - - // Marks all url_parameters that have a match to be loaded to the payload - Object.keys(props.urlParameters).forEach((key: string) => { - matches.forEach((match: string) => { - if (key === match) - matchedUrlParams[key] = props.urlParameters[key] - }) - }) - this.state = { - isLoading: false, - errorState: '', - shownParameters: shownParams, - matchedUrlParameters: matchedUrlParams, - runLink: '', - runName: '', - runToken: '', - runUrl: '', - runType: this.getRunTypes()[0], - platform: '' - }; - } - - componentDidMount = () => { - document.getElementById('runName').focus() - this.setState({ - platform: this.getPlatforms(this.state.runType)[0] - }) - } - - getRunTypes = () => { - let types = []; - if (this.props.trainingPlatforms.length) - types.push('training'); - if (this.props.servingPlatforms.length) - types.push('serving'); - return types; - } - - getPlatforms = (runType:string) => { - if (runType === 'training') - return this.props.trainingPlatforms.filter(platform => platform !== "knative") - if (runType === 'serving') - return this.props.servingPlatforms.filter(platform => platform !== "knative") - } - - handleSubmit = async (e:any) => { - e.preventDefault(); - let errorState = ''; - let runLink = ''; - const stage = this.state.runType === 'serving' ? 'serve' : 'train'; - const nameParam = this.state.runName ? `&run_name=${ this.state.runName }` : ``; - const setRunLink = this.props.setRunLink - - var postBody: {[key: string]: string} = { - github_token: this.state.runToken, - github_url: this.state.runUrl - } - - Object.keys(this.state.shownParameters).forEach((key: string) => { - postBody[key] = this.state.shownParameters[key].value - }); - - if (this.state.matchedUrlParameters) - Object.keys(this.state.matchedUrlParameters).forEach((key: string) => { - postBody[key] = this.state.matchedUrlParameters[key] - }); - - const options = { - headers: { - 'Accept': 'application/json', - 'Content-type': 'application/json' - }, - method: 'POST', - body: JSON.stringify(postBody) - }; - try { - this.setState({ - isLoading: true - }); - const runResult = await fetch(`${this.props.API}` + - `/apis/v1alpha1/models/${this.props.id}/run?` + - `pipeline_stage=${stage}&execution_platform=${this.state.platform}${nameParam}` - , options); - if (runResult.status === 200) { - const { run_url } = await runResult.json(); - setRunLink(`${this.props.KFP}/pipeline/#` + run_url) - runLink = run_url; - } else { - errorState = String(runResult.statusText); - } - this.setState({ - runLink, - errorState, - isLoading: false - }); - } catch (e) { - console.log(`Model trial run creation: ${ e }`); - } - } - - handleChange = (field:string) => (event:any) => { - this.setState({ [field]: event.target.value }); - } - - public render() { - const { id } = this.props; - return ( -
-
- { this.state.runLink ? -
-

View Trial Pipeline

-

The sample pipeline created for this model's trial run can be viewed at the following link:

- {`View '${this.state.runName || this.props.id}' on Kubeflow Pipelines.`} -
- : -
-

Create a Trial Run

-

- Complete the following inputs and hit 'Submit' - to run the model in a sample pipeline. -

-
- - {this.getRunTypes().map((name: string, i: number)=> - { capitalized(name) } - )} - - - { this.getPlatforms(this.state.runType).map((name:string, i:number) => - { name.length > 3 ? capitalized(name) : name.toUpperCase() } - )} - - ) => this.setState({ runName: e.currentTarget.value})} - /> - { this.state.shownParameters && - Object.keys(this.state.shownParameters).map((key: string) => { - return ( - ) => { - this.setState({ - shownParameters: { - ...this.state.shownParameters, - [key]: {description: this.state.shownParameters[key].description, value: e.currentTarget.value} - } - }) - }} - /> - ) - }) - } - {(this.props.servableCredentialsRequired || this.props.trainableCredentialsRequired) && - <> - ) => this.setState({ runToken: e.currentTarget.value})} - /> - ) => this.setState({ runUrl: e.currentTarget.value})} - /> - - } - - - { this.state.errorState ? -

- { `Run Error: Please Retry - ${ this.state.errorState }` } -

- : - this.state.isLoading && -

- { `Loading...` } -

- } - { !this.state.isLoading && -
- -
- } -
- } -
-
- ); - } -}; diff --git a/dashboard/origin-mlx/src/components/RunView/RunView.tsx b/dashboard/origin-mlx/src/components/RunView/RunView.tsx deleted file mode 100644 index 4275d05e..00000000 --- a/dashboard/origin-mlx/src/components/RunView/RunView.tsx +++ /dev/null @@ -1,279 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React, { useContext, useState, ChangeEvent, FormEvent } from 'react' -import StoreContext from '../../lib/stores/context' - -import Button from '../Button' -import TextField from '@material-ui/core/TextField' -import { requestArtifactRun, RunParameters } from '../../lib/api/run'; - - -interface RunViewProps { - type: string, - asset: { - [key: string]: any, - parameters?: any[] - } - setRunLink?: Function -} - -function RunView(props: RunViewProps) { - const { asset, type } = props - - const { store } = useContext(StoreContext) - const { api, kfp } = store.settings.endpoints - const API = api.value ? api.value : api.default - const KFP = kfp.value ? kfp.value : kfp.default - const setRunLink = props.setRunLink - - var shownParams: {[key: string]: any}[] = [] - var matchedUrlParams: {[key: string]: string} = {} - var matches: string[] = [] - - // Adds all parameters that don't already have a value (from the url) - // to list of parameters which we will ask the user for - if (asset.parameters) { - for(var assetIter = 0; assetIter < asset.parameters.length; assetIter++) { - let hasMatch = false - for(const key of Object.keys(asset.url_parameters)) { - if (key === asset.parameters[assetIter].name) - hasMatch = true - } - // If there is no matching url_parameter add the parameter to the form - if (!hasMatch) - shownParams.push(asset.parameters[assetIter]) - else - matches.push(asset.parameters[assetIter].name) - } - } - - // Marks all url_parameters that have a match to be loaded to the payload - Object.keys(asset.url_parameters).forEach((key: string) => { - matches.forEach((match: string) => { - if (key === match) - matchedUrlParams[key] = asset.url_parameters[key] - }) - }) - - const [ run, setRun ] = useState({ - ...Object.fromEntries((shownParams || []).map( - ({ name, value, default: defaultValue }) => - [ name, value || defaultValue || '' ])), - runname: asset.name, - link: undefined, - }) - - function handleSubmit(event: FormEvent) { - event.preventDefault() - const { link, ...parameters } = run - - var payload: RunParameters = {name: parameters.name} - Object.keys(parameters).forEach((key: string) => { - payload[key] = parameters[key] - }); - Object.keys(matchedUrlParams).forEach((key: string) => { - payload[key] = asset.url_parameters[key] - }) - - requestArtifactRun(API, type, asset.id, payload) - .then(({ run_url })=> { - setRunLink(`${KFP}/pipeline/#` + run_url) - setRun({ ...run, link: run_url }) - }) - } - - return ( -
-
- {run.link ? -
-

View Trial Pipeline

-

The sample pipeline created for this model's trial run can be viewed at the following link:

- - {`View '${run.runname || asset.name}' on Kubeflow Pipelines.`} - -
- : -
- { type === "operators" ? -

Install the Operator

- : -

Create a Trial Run

- } - { type === "operators" ? -

- {`Click Install to deploy the Operator`} -

: -

- {`Complete the following inputs and hit 'Submit' - to run the ${type} in a sample pipeline.`} -

- } -
- { type === "operator" ? - ) => - setRun({ ...run, name: e.currentTarget.value })} - /> : - ) => - setRun({ ...run, runname: e.currentTarget.value })} - /> - } - { type === "datasets" && - ) => - setRun({ ...run, namespace: e.currentTarget.value })} - /> - } - { type === "notebooks" && - <> - ) => - setRun({ ...run, dataset_pvc: e.currentTarget.value })} - /> - ) => - setRun({ ...run, mount_path: e.currentTarget.value })} - /> - - } - {shownParams && shownParams.map(({ name , description }) => ( - ) => - setRun({ ...run, [name]: e.currentTarget.value })} - /> - ))} -
- -
- {/* - { this.getRunTypes().map((name:string, i:number)=> - { capitalized(name) } - )} - - - - { this.getPlatforms(this.state.runType).map((name:string, i:number) => - { name.length > 3 ? capitalized(name) : name.toUpperCase() } - )} - */} - - - {/* { this.state.errorState ? -

- { `Run Error: Please Retry - ${ this.state.errorState }` } -

- : - this.state.isLoading && -

- { `Loading...` } -

- } */} - -
- } -
-
- ) -} - -export default RunView diff --git a/dashboard/origin-mlx/src/components/RunView/index.ts b/dashboard/origin-mlx/src/components/RunView/index.ts deleted file mode 100644 index 392c08b0..00000000 --- a/dashboard/origin-mlx/src/components/RunView/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2021 The MLX Contributors -// -// SPDX-License-Identifier: Apache-2.0 -import RunView from './RunView' -import ModelRunView from './ModelRunView' - -export default RunView -export { ModelRunView } diff --git a/dashboard/origin-mlx/src/components/SecretMenu.tsx b/dashboard/origin-mlx/src/components/SecretMenu.tsx deleted file mode 100644 index be465e3a..00000000 --- a/dashboard/origin-mlx/src/components/SecretMenu.tsx +++ /dev/null @@ -1,63 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React, { useContext } from 'react' -import StoreContext from '../lib/stores/context' -import { Typography } from '@material-ui/core'; -import { Link } from 'react-router-dom'; - - -export default function SecretMenu () { - const { settings } = useContext(StoreContext).store - const { branding, endpoints } = settings - - const API = endpoints.api.value || endpoints.api.default - const KFP = endpoints.kfp.value || endpoints.kfp.default - - const shortenBrand = (brand: string) => { - if (brand.length <= 10) - return brand; - - const split = brand.split(' ') - let brandAbrev = "" - split.forEach((word: string) => { - if (word.toLowerCase() === "exchange") - brandAbrev += "X" - else - brandAbrev += word[0].toUpperCase() - }) - return brandAbrev - } - - return ( -
- - [x] click panel to close - - -
- ); -} diff --git a/dashboard/origin-mlx/src/components/Sidebar/SideBarHeader.tsx b/dashboard/origin-mlx/src/components/Sidebar/SideBarHeader.tsx deleted file mode 100644 index 20959678..00000000 --- a/dashboard/origin-mlx/src/components/Sidebar/SideBarHeader.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React from 'react' -import MLXLogo from "../../images/mlx-logo-name-white.png"; -import Link from '../Link' -import LFAILogo from "../../images/lfaidata.png"; - -interface SideBarHeaderProps { - name: string; - active: boolean; -} - -const SideBarHeader: React.FunctionComponent = (props) => { - return ( -
- - MLX Logo - -
- - LFAI Logo - -
- ); -}; - -export default SideBarHeader; diff --git a/dashboard/origin-mlx/src/components/Sidebar/Sidebar.tsx b/dashboard/origin-mlx/src/components/Sidebar/Sidebar.tsx deleted file mode 100644 index 654fe08c..00000000 --- a/dashboard/origin-mlx/src/components/Sidebar/Sidebar.tsx +++ /dev/null @@ -1,42 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React, { ReactNode } from 'react' -import ReactSidebar from 'react-sidebar' -import SidebarList from './SidebarList' - - -const sideNavColors = { - bg: '#303030', - fgActive: '#fff', - fgActiveInvisible: 'rgb(227, 233, 237, 0)', - fgDefault: '#666', - hover: '#3f3f3f', - separator: '#666', -}; - - -function Sidebar(props: { children: ReactNode }) { - return ( - } - open={ true } - docked={ true } - styles={{ - sidebar:{ - "color": sideNavColors.fgActive, - "backgroundColor": sideNavColors.bg, - "width":"240px", - "height":"100%", - "overflow":"hidden auto" - } - }} - > - {props.children} - - ) -} - -export default Sidebar diff --git a/dashboard/origin-mlx/src/components/Sidebar/SidebarList.tsx b/dashboard/origin-mlx/src/components/Sidebar/SidebarList.tsx deleted file mode 100644 index 7f0d4fa4..00000000 --- a/dashboard/origin-mlx/src/components/Sidebar/SidebarList.tsx +++ /dev/null @@ -1,157 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React, { useContext, useEffect, useState } from 'react'; -import StoreContext from '../../lib/stores/context' -import SidebarHeader from './SideBarHeader'; -import SidebarListItem from './SidebarListItem'; -import '../../styles/Sidebar.css' -import Icon from '@material-ui/core/Icon'; -import SecretMenu from '../SecretMenu'; -import { capitalize, getUserInfo, hasRole } from '../../lib/util'; -import { Link } from 'react-router-dom'; - -const sideNavColors = { - bg: '#303030', - fgActive: '#fff', - fgActiveInvisible: 'rgb(227, 233, 237, 0)', - fgDefault: '#666', - hover: '#3f3f3f', - separator: '#666', -}; - -const isAdmin = hasRole(getUserInfo(), 'admin'); - -function getWindowDimensions() { - const { innerWidth: width, innerHeight: height } = window; - return { - width, - height - }; -} - -function useWindowDimensions() { - const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions()); - - useEffect(() => { - function handleResize() { - setWindowDimensions(getWindowDimensions()); - } - - window.addEventListener('resize', handleResize); - return () => window.removeEventListener('resize', handleResize); - }, []); - - return windowDimensions; -} - -function SidebarList() { - const { store } = useContext(StoreContext) - const { settings, pages } = store - const { active } = pages - const { execute } = settings.capabilities - - const enabled = (artifact: string): boolean => { - const setting = settings.artifacts[artifact] - return setting.value !== undefined ? setting.value : setting.default - } - - const artifacts = Object.keys(store.settings.artifacts).filter(enabled).filter((artifact: string) => {return artifact !== "workspace" && artifact !== "operators"}) - const [secretVisible, setSecretVisible] = useState(false) - const { height } = useWindowDimensions() - // Ensures the "Join the Conversation" button is away from the other buttons (if there is enough space) - let buffer = !isAdmin ? (height - 600) : (height - 670) / 2 // checks if you are an admin , spacing for guardHeight will change such that elements are placed at the bottom - const guardHeight = height > 700 && !secretVisible ? buffer : 0 - - console.log(height) - - return ( -
-
- - {artifacts && -
    - - {artifacts - .filter(type => type !== "workspace") - .map(type => - - ) - } - {(execute.value !== undefined ? execute.value : execute.default) - && artifacts.includes('workspace') && - - } -
    -
  • - -

    -
    -
    - chat -
    -
    - Join the Conversation -
    -
    -

    - -
  • -
- } -
- { isAdmin && (secretVisible ? -
setSecretVisible(false)}> - -
- : -
setSecretVisible(true)}> -
- settings -

Settings

-
-
- )} -
-
-
- ) -} - -export default SidebarList - -const iconMap = { - pipelines: "device_hub", - components: "developer_boards", - models: "layers", - notebooks: "library_books", - operators: "donut_large", - datasets: "storage", - workspace: "code", - inferenceservices: "layers" -} diff --git a/dashboard/origin-mlx/src/components/Sidebar/SidebarListItem.tsx b/dashboard/origin-mlx/src/components/Sidebar/SidebarListItem.tsx deleted file mode 100644 index 462ff22a..00000000 --- a/dashboard/origin-mlx/src/components/Sidebar/SidebarListItem.tsx +++ /dev/null @@ -1,63 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import { Link } from 'react-router-dom'; -import Icon from '@material-ui/core/Icon'; - -interface SidebarListItemProps { - name: string; - icon: string; - active: boolean; -} - -const SidebarListItem: React.FunctionComponent = (props) => { - const { active: isActive } = props - var link = props.name.toLocaleLowerCase(); - - if (props.name === 'Pipelines') { - link = 'pipelines' - } - else if (props.name === "Datasets") { - link = 'datasets' - } - else if (props.name === 'Components') { - link = 'components' - } - else if (props.name === 'Models') { - link = 'models' - } - else if (props.name === 'Notebooks') { - link = 'notebooks' - } - else if (props.name === 'Operators') { - link = 'operators' - } - else if (props.name === 'KFServices') { - link = 'inferenceservices' - } - else if (props.name === 'Workspace') { - link = 'workspace' - } - else if (props.name === 'Home') { - link = '' - } - else { - link = 'inferenceservices' - } - - return ( -
  • - -

    - {props.icon} - {props.name} -

    - -
  • - ); -}; - -export default SidebarListItem; diff --git a/dashboard/origin-mlx/src/components/Sidebar/index.ts b/dashboard/origin-mlx/src/components/Sidebar/index.ts deleted file mode 100644 index 73e35310..00000000 --- a/dashboard/origin-mlx/src/components/Sidebar/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright 2021 The MLX Contributors -// -// SPDX-License-Identifier: Apache-2.0 -import Sidebar from './Sidebar' - -export default Sidebar diff --git a/dashboard/origin-mlx/src/components/SourceCodeDisplay.tsx b/dashboard/origin-mlx/src/components/SourceCodeDisplay.tsx deleted file mode 100644 index df8e0ce0..00000000 --- a/dashboard/origin-mlx/src/components/SourceCodeDisplay.tsx +++ /dev/null @@ -1,57 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import * as React from 'react'; -import { UnControlled as CodeMirror } from 'react-codemirror2'; -require('codemirror/lib/codemirror.css'); -require('codemirror/theme/yeti.css'); -require('codemirror/theme/solarized.css'); -require('codemirror/theme/neo.css'); -require('codemirror/mode/xml/xml'); -require('codemirror/mode/javascript/javascript'); -require('codemirror/mode/yaml/yaml'); -require('codemirror/mode/python/python'); -require('codemirror/addon/display/autorefresh') - -interface SourceCodeDisplayProps { - code: string; - isYAML: boolean; - scrollMe?: boolean; -} - -const SourceCodeDisplay: React.FunctionComponent = (props) => { - return ( -
    -
    - { props.code.length ? -
    - -
    - : -

    loading source code...

    - } -
    -
    - ); -}; - -export default SourceCodeDisplay; diff --git a/dashboard/origin-mlx/src/components/StaticGraphParser.tsx b/dashboard/origin-mlx/src/components/StaticGraphParser.tsx deleted file mode 100644 index e144d44d..00000000 --- a/dashboard/origin-mlx/src/components/StaticGraphParser.tsx +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright 2018-2019 Google LLC - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as dagre from 'dagre'; -import { color } from '../Css'; - -export const Constants = { - NODE_HEIGHT: 64, - NODE_WIDTH: 172, -}; - -export type nodeType = 'container' | 'resource' | 'dag' | 'unknown'; - -export interface KeyValue extends Array { - 0?: string; - 1?: T; -} - -export class SelectedNodeInfo { - public args: string[]; - public command: string[]; - public condition: string; - public image: string; - public inputs: Array>; - public nodeType: nodeType; - public outputs: Array>; - public volumeMounts: Array>; - public resource: Array>; - - constructor() { - this.args = []; - this.command = []; - this.condition = ''; - this.image = ''; - this.inputs = [[]]; - this.nodeType = 'unknown'; - this.outputs = [[]]; - this.volumeMounts = [[]]; - this.resource = [[]]; - } -} - -export function _populateInfoFromTask(info: SelectedNodeInfo, task?: any): SelectedNodeInfo { - if (!task) { - return info; - } - - info.nodeType = 'container'; - if (task['taskSpec'] && task['taskSpec']['steps']) { - const steps = task['taskSpec']['steps']; - info.args = steps[0]['args'] || []; - info.command = steps[0]['command'] || []; - info.image = steps[0]['image'] || []; - info.volumeMounts = (steps[0]['volumeMounts'] || []).map((volume: any) => [ - volume.mountPath, - volume.name, - ]); - } - - if (task['taskSpec'] && task['taskSpec']['params']) - info.inputs = (task['taskSpec']['params'] || []).map((p: any) => [p['name'], p['value'] || '']); - if (task['taskSpec']['results']) - info.outputs = (task['taskSpec']['results'] || []).map((p: any) => { - return [p['name'], p['description'] || '']; - }); - - return info; -} - -export function createGraph(workflow: any): dagre.graphlib.Graph { - const graph = new dagre.graphlib.Graph(); - graph.setGraph({}); - graph.setDefaultEdgeLabel(() => ({})); - - buildTektonDag(graph, workflow); - return graph; -} - -function buildTektonDag(graph: dagre.graphlib.Graph, template: any): void { - const pipeline = template; - const tasks = (pipeline['spec']['pipelineSpec']['tasks'] || []).concat( - pipeline['spec']['pipelineSpec']['finally'] || [], - ); - - const exitHandlers = - (pipeline['spec']['pipelineSpec']['finally'] || []).map((element: any) => { - return element['name']; - }) || []; - - for (const task of tasks) { - const taskName = task['name']; - - // Checks for dependencies mentioned in the runAfter section of a task and then checks for dependencies based - // on task output being passed in as parameters - if (task['runAfter']) - task['runAfter'].forEach((depTask: any) => { - graph.setEdge(depTask, taskName); - }); - - // Adds any dependencies that arise from Conditions and tracks these dependencies to make sure they aren't duplicated in the case that - // the Condition and the base task use output from the same dependency - for (const condition of task['conditions'] || []) { - for (const condParam of condition['params'] || []) { - if ( - condParam['value'].substring(0, 8) === '$(tasks.' && - condParam['value'].substring(condParam['value'].length - 1) === ')' - ) { - const paramSplit = condParam['value'].split('.'); - const parentTask = paramSplit[1]; - - graph.setEdge(parentTask, taskName); - } - } - } - - for (const param of task['params'] || []) { - if ( - param['value'].substring(0, 8) === '$(tasks.' && - param['value'].substring(param['value'].length - 1) === ')' - ) { - const paramSplit = param['value'].split('.'); - const parentTask = paramSplit[1]; - graph.setEdge(parentTask, taskName); - } - } - - // Add the info for this node - const info = new SelectedNodeInfo(); - _populateInfoFromTask(info, task); - - const label = exitHandlers.includes(task['name']) ? 'onExit - ' + taskName : taskName; - const bgColor = exitHandlers.includes(task['name']) - ? color.lightGrey - : task.when - ? 'cornsilk' - : undefined; - - graph.setNode(taskName, { - bgColor: bgColor, - height: Constants.NODE_HEIGHT, - info, - label: label, - width: Constants.NODE_WIDTH, - }); - } -} diff --git a/dashboard/origin-mlx/src/components/Tooltip/Tooltip.tsx b/dashboard/origin-mlx/src/components/Tooltip/Tooltip.tsx deleted file mode 100644 index 1a84b79e..00000000 --- a/dashboard/origin-mlx/src/components/Tooltip/Tooltip.tsx +++ /dev/null @@ -1,61 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React, { useState } from 'react' -import styled from 'styled-components' - -function ToolTip(props: any) { - const { content, children } = props; - const [ isShown, setIsShown ] = useState(false) - - return ( - setIsShown(true)} - onMouseLeave={(event: never) => setIsShown(false)} - > - {children} - {content} - - ) -} - - -const Display = styled.div<{ enabled?: boolean }>` - visibility: ${ ({ enabled }) => enabled ? 'visible' : 'hidden' }; - opacity: ${ ({ enabled }) => enabled ? 1 : 0 }; - - position: absolute; - left: calc(100% + 10px); - top: 50%; - transform: translateY(-50%); - - width: 200px; - padding: 15px; - border-radius: 5px; - border: 1px solid #fff; - z-index: 3; - - background-color: ${ ({ theme }) => theme.bg }; - transition: visibility 250ms linear, opacity 250ms linear; - color: ${ ({ theme }) => theme.fgActive }; -` - -Display.defaultProps = { - theme: { - bg: '#303030', - fgActive: '#fff', - fgActiveInvisible: 'rgb(227, 233, 237, 0)', - fgDefault: '#666', - hover: '#3f3f3f', - separator: '#666', - } -} - -const Wrapper = styled.div` - position: relative; -` - - -export default ToolTip diff --git a/dashboard/origin-mlx/src/components/UploadButton.tsx b/dashboard/origin-mlx/src/components/UploadButton.tsx deleted file mode 100644 index 4b55de47..00000000 --- a/dashboard/origin-mlx/src/components/UploadButton.tsx +++ /dev/null @@ -1,189 +0,0 @@ -/* -* Copyright 2021 The MLX Contributors -* -* SPDX-License-Identifier: Apache-2.0 -*/ -import React, { useContext, useState, ChangeEvent, FormEvent, ReactNode } from 'react' -import StoreContext from '../lib/stores/context' -import { Link } from 'react-router-dom' -import { RouteComponentProps } from 'react-router'; -import { capitalize } from '../lib/util' -import { upload } from '../lib/api/upload' -import Button from '../components/Button' -import Icon from '@material-ui/core/Icon' -import Hero from '../components/Hero' -import Paper from '@material-ui/core/Paper' -import TextField from '@material-ui/core/TextField' -import Typography from '@material-ui/core/Typography' -import indicatorGif from '../images/indicator-gif.gif' -import { UPDATE_ARTIFACT_ASSET } from '../lib/stores/artifacts' -import { Artifact } from '../lib/stores/artifacts' -import { setFeaturedArtifacts, setPublishApprovedArtifacts } from '../lib/api/artifacts'; -import yaml from 'js-yaml'; -import fs from 'fs'; -interface MatchProps { - type: string -} - -function UploadButton(props: RouteComponentProps) { - const { type } = props.match.params - const [ name, setName ] = useState('') - const [ url, setUrl ] = useState('') - const [ enterpriseToken, setEnterpriseToken ] = useState('') - const [ uploadStatus, setUploadStatus] = useState({fullStatus: '', link: ''}) - const [ file, setFile ] = useState(null) - const [ serviceName, setServiceName ] = useState(null) - const [ loading, setLoading ] = useState(false) - const [ error, setError ] = useState('') - const { store, dispatch } = useContext(StoreContext) - const { artifacts, settings } = store - const API = settings.endpoints.api.value || settings.endpoints.api.default - const isDeployed = false - const assets: {[key: string]: Artifact} = Object.fromEntries(artifacts[type] - .map((asset: Artifact) => [asset.name, asset])) - - const handleFile = (e: ChangeEvent) => { - setFile(e.currentTarget.files[0]) - const fileReader = new FileReader(); - fileReader.onloadend = () => { - if (typeof fileReader.result === 'string') { - const service : any = yaml.safeLoad(fileReader.result) - setServiceName(service.metadata && service.metadata.name || "") - } - } - fileReader.readAsText(e.currentTarget.files[0]); - setUploadStatus({fullStatus: e.currentTarget.files[0].name, link: ''}) - } - const handleSubmit = async (e: FormEvent) => { - e.preventDefault() - if (file) { - setLoading(true) - const response = await upload(API, type, file, { - name, url, token: enterpriseToken - }) - setLoading(false) - if (response.status !== 200) - response.text().then(text => { - setError(text) - setUploadStatus({fullStatus: ("Deployment of " + file.name + " failed"), link: ''}) - }) - else{ - const response_json = await response.json() - // Makes the newly uploaded file publishable and featured - const path = `${serviceName}` - console.log("path") - console.log(path) - setUploadStatus({fullStatus: ("Deployment Suceeded: predictor starting now."), link: path}) - // TODO: Publishable and featured properties deprecated for kfservices - will revisit this - // publishable.add(path) - // featured.add(path) - // await setPublishApprovedArtifacts(API, type, Array.from(publishable.values())) - // .then(() => dispatch({ - // type: UPDATE_ARTIFACT_ASSET, assetType: type, - // path, payload: { publish_approved: true } - // })) - // await setFeaturedArtifacts(API, type, Array.from(featured.values())) - // .then(() => dispatch({ - // type: UPDATE_ARTIFACT_ASSET, assetType: type, - // path, payload: { featured: true } - // })) - } - setFile(null) - } - for (var i=0; i< artifacts.length; i++) { - if (artifacts[i].status.conditions.type === "DefaultPredictorReady") { - console.log(artifacts[i].status.conditions.status) - console.log(artifacts.length) - } - } - } - // var uploadFileName = artifacts[artifacts.length - 1].metadata.name - console.log(uploadStatus) - // const endpoint = `/${type}/upload?` + (name && `name=${name}`) + (url && `&url=${url}`) - return ( -
    -
    - - - Deploy a .yaml file to create a new KFService. - -
    - - {type === 'inferenceservices' && isDeployed && - ) => setEnterpriseToken(e.currentTarget.value)} - fullWidth - margin="dense" - variant="outlined" - autoCorrect="false" - label={`${capitalize(type)} Enterprise GitHub Token (if necessary)`} - helperText="If no value is entered, and a token is necessary, your upload may fail." - InputLabelProps={{ - shrink: true, - }} - /> - } - {!file ? -
    - - -
    - : - <> - - - } - -
    - { uploadStatus.link ? - -
    -

    Click to view service details.

    - indicator gif -
    - : -

    {uploadStatus.fullStatus}

    - } - {error && -

    - {`Upload Error: Please Retry - ${error}`} -

    - } -
    - - {loading && -

    - {`Uploading...`} - indicator gif -

    - } -
    -
    -
    - ) -} -export default UploadButton \ No newline at end of file diff --git a/dashboard/origin-mlx/src/components/WorkflowParser.tsx b/dashboard/origin-mlx/src/components/WorkflowParser.tsx deleted file mode 100644 index fa76ba48..00000000 --- a/dashboard/origin-mlx/src/components/WorkflowParser.tsx +++ /dev/null @@ -1,401 +0,0 @@ -/* - * Copyright 2018-2019 Google LLC - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as dagre from 'dagre'; -import ErrorIcon from '@material-ui/icons/Error'; -import PendingIcon from '@material-ui/icons/Schedule'; -import RunningIcon from '../icons/statusRunning'; -import SkippedIcon from '@material-ui/icons/SkipNext'; -import SuccessIcon from '@material-ui/icons/CheckCircle'; -import CachedIcon from '@material-ui/icons/Cached'; -import TerminatedIcon from '../icons/statusTerminated'; -import Tooltip from '@material-ui/core/Tooltip'; -import UnknownIcon from '@material-ui/icons/Help'; -import { color } from '../Css'; - -export function statusToBgColor(status?: NodePhase, nodeMessage?: string): string { - status = checkIfTerminated(status, nodeMessage); - switch (status) { - case NodePhase.ERROR: - // fall through - case NodePhase.FAILED: - return statusBgColors.error; - case NodePhase.PENDING: - return statusBgColors.notStarted; - case NodePhase.TERMINATING: - // fall through - case NodePhase.RUNNING: - return statusBgColors.running; - case NodePhase.SUCCEEDED: - return statusBgColors.succeeded; - case NodePhase.CACHED: - return statusBgColors.cached; - case NodePhase.SKIPPED: - // fall through - case NodePhase.TERMINATED: - return statusBgColors.terminatedOrSkipped; - case NodePhase.UNKNOWN: - // fall through - default: - console.log("Status to background color: status not recognized") - return statusBgColors.notStarted; - } -} - -export function formatDateString(date: Date | string | undefined): string { - if (typeof date === 'string') { - return new Date(date).toLocaleString(); - } else { - return date ? date.toLocaleString() : '-'; - } -} - -export function checkIfTerminated(status?: NodePhase, nodeMessage?: string): NodePhase | undefined { - // Argo considers terminated runs as having "Failed", so we have to examine the failure message to - // determine why the run failed. - if (status === NodePhase.FAILED && nodeMessage === 'terminated') { - status = NodePhase.TERMINATED; - } - return status; -} - -export function statusToIcon( - status?: NodePhase, - startDate?: Date | string, - endDate?: Date | string, - nodeMessage?: string, - ): JSX.Element { - status = checkIfTerminated(status, nodeMessage); - // tslint:disable-next-line:variable-name - let IconComponent: any = UnknownIcon; - let iconColor = color.inactive; - let title = 'Unknown status'; - switch (status) { - case NodePhase.ERROR: - IconComponent = ErrorIcon; - iconColor = color.errorText; - title = 'Error while running this resource'; - break; - case NodePhase.FAILED: - IconComponent = ErrorIcon; - iconColor = color.errorText; - title = 'Resource failed to execute'; - break; - case NodePhase.PENDING: - IconComponent = PendingIcon; - iconColor = color.weak; - title = 'Pending execution'; - break; - case NodePhase.RUNNING: - IconComponent = RunningIcon; - iconColor = color.blue; - title = 'Running'; - break; - case NodePhase.TERMINATING: - IconComponent = RunningIcon; - iconColor = color.blue; - title = 'Run is terminating'; - break; - case NodePhase.SKIPPED: - IconComponent = SkippedIcon; - title = 'Execution has been skipped for this resource'; - break; - case NodePhase.SUCCEEDED: - IconComponent = SuccessIcon; - iconColor = color.success; - title = 'Executed successfully'; - break; - case NodePhase.COMPLETED: - IconComponent = SuccessIcon; - iconColor = color.success; - title = 'Executed successfully'; - break; - case NodePhase.CACHED: // This is not argo native, only applies to node. - IconComponent = CachedIcon; - iconColor = color.success; - title = 'Execution was skipped and outputs were taken from cache'; - break; - case NodePhase.TERMINATED: - IconComponent = TerminatedIcon; - iconColor = color.terminated; - title = 'Run was manually terminated'; - break; - case NodePhase.PIPELINERUNTIMEOUT: - IconComponent = ErrorIcon; - iconColor = color.errorText; - title = 'Pipeline run timeout'; - break; - case NodePhase.COULDNTGETCONDITION: - IconComponent = ErrorIcon; - iconColor = color.errorText; - title = 'Could not retrieve the condition'; - break; - case NodePhase.CONDITIONCHECKFAILED: - IconComponent = SkippedIcon; - title = 'Execution has been skipped due to a Condition check failure'; - break; - case NodePhase.PIPELINERUNCANCELLED: - IconComponent = TerminatedIcon; - iconColor = color.terminated; - title = 'PipelineRun cancelled'; - break; - case NodePhase.PIPELINERUNCOULDNTCANCEL: - IconComponent = TerminatedIcon; - iconColor = color.terminated; - title = 'PipelineRun could not cancel'; - break; - case NodePhase.TASKRUNCANCELLED: - IconComponent = TerminatedIcon; - iconColor = color.terminated; - title = 'TaskRun cancelled'; - break; - case NodePhase.TASKRUNCOULDNTCANCEL: - IconComponent = TerminatedIcon; - iconColor = color.terminated; - title = 'TaskRun could not cancel'; - break; - case NodePhase.UNKNOWN: - break; - default: - console.log("Status to icon: status not recognized") - } - return ( - -
    {title}
    - {/* These dates may actually be strings, not a Dates due to a bug in swagger's handling of dates */} - {startDate &&
    Start: {formatDateString(startDate)}
    } - {endDate &&
    End: {formatDateString(endDate)}
    } -
    - } - > - - - - - ); - } - -export const Constants = { - NODE_HEIGHT: 64, - NODE_WIDTH: 172, - }; - -export interface KeyValue extends Array { - 0?: string; - 1?: T; - } - -export const statusBgColors = { - error: '#fce8e6', - notStarted: '#f7f7f7', - running: '#e8f0fe', - succeeded: '#e6f4ea', - cached: '#e6f4ea', - terminatedOrSkipped: '#f1f3f4', - warning: '#fef7f0', -}; - -export enum NodePhase { - ERROR = 'Error', - FAILED = 'Failed', - PENDING = 'Pending', - RUNNING = 'Running', - SKIPPED = 'Skipped', - SUCCEEDED = 'Succeeded', - COMPLETED = 'Completed', - CACHED = 'Cached', - TERMINATING = 'Terminating', - PIPELINERUNTIMEOUT = 'PipelineRunTimeout', - COULDNTGETCONDITION = 'CouldntGetCondition', - CONDITIONCHECKFAILED = 'ConditionCheckFailed', - PIPELINERUNCANCELLED = 'PipelineRunCancelled', - PIPELINERUNCOULDNTCANCEL = 'PipelineRunCouldntCancel', - TASKRUNCANCELLED = 'TaskRunCancelled', - TASKRUNCOULDNTCANCEL = 'TaskRunCouldntCancel', - TERMINATED = 'Terminated', - UNKNOWN = 'Unknown', -} - -export function statusToPhase(nodeStatus: string | undefined): NodePhase { - if (!nodeStatus) return 'Unknown' as NodePhase; - else if (nodeStatus === 'Completed') return 'Succeeded' as NodePhase; - else if (nodeStatus === 'ConditionCheckFailed') return 'Skipped' as NodePhase; - else if (nodeStatus === 'CouldntGetCondition') return 'Error' as NodePhase; - else if ( - nodeStatus === 'PipelineRunCancelled' || - nodeStatus === 'PipelineRunCouldntCancel' || - nodeStatus === 'TaskRunCancelled' || - nodeStatus === 'TaskRunCouldntCancel' - ) - return 'Terminated' as NodePhase; - return nodeStatus as NodePhase; -} - -export enum StorageService { - GCS = 'gcs', - HTTP = 'http', - HTTPS = 'https', - MINIO = 'minio', - S3 = 's3', -} - -export interface StoragePath { - source: StorageService; - bucket: string; - key: string; -} - -export default class WorkflowParser { - public static createRuntimeGraph(workflow: any): dagre.graphlib.Graph { - const graph = new dagre.graphlib.Graph(); - graph.setGraph({}); - graph.setDefaultEdgeLabel(() => ({})); - - // If a run exists but has no status is available yet return an empty graph - if ( - workflow && - workflow.status && - (Object.keys(workflow.status).length === 0 || !workflow.status.taskRuns) - ) - return graph; - - const tasks = (workflow['spec']['pipelineSpec']['tasks'] || []).concat( - workflow['spec']['pipelineSpec']['finally'] || [], - ); - const status = workflow['status']['taskRuns']; - const pipelineParams = workflow['spec']['params']; - const exitHandlers = - (workflow['spec']['pipelineSpec']['finally'] || []).map((element: any) => { - return element['name']; - }) || []; - - // Create a map from task name to status for every status received - const statusMap = new Map(); - for (const taskRunId of Object.getOwnPropertyNames(status)) { - status[taskRunId]['taskRunId'] = taskRunId; - if (status[taskRunId]['status']) - statusMap.set(status[taskRunId]['pipelineTaskName'], status[taskRunId]); - } - - for (const task of tasks) { - // If the task has a status then add it and its edges to the graph - if (statusMap.get(task['name'])) { - const conditions = task['conditions'] || []; - const taskId = - statusMap.get(task['name']) && statusMap.get(task['name'])!['status']['podName'] !== '' - ? statusMap.get(task['name'])!['status']['podName'] - : task['name']; - const edges = this.checkParams(statusMap, pipelineParams, task, ''); - - // Add all of this Task's conditional dependencies as Task dependencies - for (const condition of conditions) - edges.push(...this.checkParams(statusMap, pipelineParams, condition, taskId)); - - if (task['runAfter']) { - task['runAfter'].forEach((parentTask: any) => { - if ( - statusMap.get(parentTask) && - statusMap.get(parentTask)!['status']['conditions'][0]['type'] === 'Succeeded' - ) { - const parentId = statusMap.get(parentTask)!['status']['podName']; - edges.push({ parent: parentId, child: taskId }); - } - }); - } - - for (const edge of edges || []) graph.setEdge(edge['parent'], edge['child']); - - const status = this.getStatus(statusMap.get(task['name'])); - const phase = statusToPhase(status); - const statusColoring = exitHandlers.includes(task['name']) - ? '#fef7f0' - : statusToBgColor(phase, ''); - // Add a node for the Task - graph.setNode(taskId, { - height: Constants.NODE_HEIGHT, - icon: statusToIcon(status), - label: task['name'], - statusColoring: statusColoring, - width: Constants.NODE_WIDTH, - }); - } - } - - return graph; - } - - private static checkParams( - statusMap: Map, - pipelineParams: any, - component: any, - ownerTask: string, - ): { parent: string; child: string }[] { - const edges: { parent: string; child: string }[] = []; - const componentId = - ownerTask !== '' - ? component['conditionRef'] - : statusMap.get(component['name']) && - statusMap.get(component['name'])!['status']['podName'] !== '' - ? statusMap.get(component['name'])!['status']['podName'] - : component['name']; - - // Adds dependencies from task params - for (const param of component['params'] || []) { - let paramValue = param['value'] || ''; - - // If the parameters are passed from the pipeline parameters then grab the value from the pipeline parameters - if ( - param['value'].substring(0, 9) === '$(params.' && - param['value'].substring(param['value'].length - 1) === ')' - ) { - const paramName = param['value'].substring(9, param['value'].length - 1); - for (const pipelineParam of pipelineParams) - if (pipelineParam['name'] === paramName) paramValue = pipelineParam['value']; - } - // If the parameters are passed from the parent task's results and the task is completed then grab the resulting values - else if ( - param['value'].substring(0, 2) === '$(' && - param['value'].substring(param['value'].length - 1) === ')' - ) { - const paramSplit = param['value'].split('.'); - const parentTask = paramSplit[1]; - const paramName = paramSplit[paramSplit.length - 1].substring( - 0, - paramSplit[paramSplit.length - 1].length - 1, - ); - - if ( - statusMap.get(parentTask) && - statusMap.get(parentTask)!['status']['conditions'][0]['type'] === 'Succeeded' - ) { - const parentId = statusMap.get(parentTask)!['status']['podName']; - edges.push({ parent: parentId, child: ownerTask === '' ? componentId : ownerTask }); - - // Add the taskResults value to the params value in status - for (const result of statusMap.get(parentTask)!['status']['taskResults'] || []) { - if (result['name'] === paramName) paramValue = result['value']; - } - } - } - // Find the output that matches this input and pull the value - if ( - statusMap.get(component['name']) && - statusMap.get(component['name'])['status']['taskSpec'] - ) { - for (const statusParam of statusMap.get(component['name'])!['status']['taskSpec']['params']) - if (statusParam['name'] === param['name']) statusParam['value'] = paramValue; - } - } - - return edges; - } - - public static getStatus(execStatus: any): NodePhase { - return execStatus!.status.conditions[0].reason; - } -} diff --git a/dashboard/origin-mlx/src/icons/codaitLogo.tsx b/dashboard/origin-mlx/src/icons/codaitLogo.tsx deleted file mode 100644 index 023b8d67..00000000 --- a/dashboard/origin-mlx/src/icons/codaitLogo.tsx +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2021 The MLX Contributors - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from 'react'; - -export default class CodaitLogo extends React.Component<{ color: string, style: React.CSSProperties }> { - public render(): JSX.Element { - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ); - } -} diff --git a/dashboard/origin-mlx/src/icons/experiments.tsx b/dashboard/origin-mlx/src/icons/experiments.tsx deleted file mode 100644 index 16bee6b2..00000000 --- a/dashboard/origin-mlx/src/icons/experiments.tsx +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2018 kubeflow.org - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from 'react'; - -export default class ExperimentsIcon extends React.Component<{color: string}> { - public render(): JSX.Element { - return ( - - - - - - - - - - - - - - - - - ); - } -} diff --git a/dashboard/origin-mlx/src/icons/kubeflowLogo.tsx b/dashboard/origin-mlx/src/icons/kubeflowLogo.tsx deleted file mode 100644 index e8c10f67..00000000 --- a/dashboard/origin-mlx/src/icons/kubeflowLogo.tsx +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2018 kubeflow.org - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from 'react'; - -export default class KubeflowLogo extends React.Component<{ color: string, style: React.CSSProperties }> { - public render(): JSX.Element { - return ( - - - - - - - - - - - - - - - - - - - ); - } -} diff --git a/dashboard/origin-mlx/src/icons/pipelines.tsx b/dashboard/origin-mlx/src/icons/pipelines.tsx deleted file mode 100644 index e859cf0c..00000000 --- a/dashboard/origin-mlx/src/icons/pipelines.tsx +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2018 kubeflow.org - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from 'react'; - -export default class PipelinesIcon extends React.Component<{color: string}> { - public render(): JSX.Element { - return ( - - - - - - - - - ); - } -} diff --git a/dashboard/origin-mlx/src/icons/statusRunning.tsx b/dashboard/origin-mlx/src/icons/statusRunning.tsx deleted file mode 100644 index 9458b255..00000000 --- a/dashboard/origin-mlx/src/icons/statusRunning.tsx +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2018 kubeflow.org - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from 'react'; -import { CSSProperties } from 'jss/css'; - -export default class StatusRunning extends React.Component<{ style: CSSProperties }> { - public render(): JSX.Element { - const { style } = this.props; - return ( - - - - - - - - - - ); - } -} diff --git a/dashboard/origin-mlx/src/icons/statusTerminated.tsx b/dashboard/origin-mlx/src/icons/statusTerminated.tsx deleted file mode 100644 index 282a0963..00000000 --- a/dashboard/origin-mlx/src/icons/statusTerminated.tsx +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2019 kubeflow.org - * - * SPDX-License-Identifier: Apache-2.0 - */ - -import * as React from 'react'; -import { CSSProperties } from 'jss/css'; -export default class StatusRunning extends React.Component<{ style: CSSProperties }> { - public render(): JSX.Element { - const { style } = this.props; - return ( - - - - - - - - - - ); - } -} diff --git a/dashboard/origin-mlx/src/images/cancel-outline.png b/dashboard/origin-mlx/src/images/cancel-outline.png deleted file mode 100644 index 7709e8f34c2712a7a70d2df3bb353f1470e189f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17708 zcmZ|02{@Er_&5dV4tcaRLDLoYTi$ z1ON&DL<06*@Z+yv?>hWobM;^B%f?0r|eO(;Y--lnD!&QtJFf zJbL*W_C(a2h&RtEwsh+YCg#8ByJRDDDw%fe+MSMjS#Jb|8v3)$6@+s#EV;5c22)2! zyzXuE`Wo-i25d=)?eg)Jm8#mbST>$RgQ@>0Ptb8s zt>y9`g7$Hh_RIiId}8D6gf|RDv$$q-2|FbU@fK;hE5mu67+c1w`S-qk3Tx5aefyz3 z8LSRGBo6YlMITF6wG_JMN9)|&gI4z(4UV{xLjxmyNVR>8>ET03pPnqa=;2BQ7y##3 zo?qds+j|=$-uF!YORi=(*++BfCXh$uJ=<=Nl|&V}trLCa<}<(o$T#B^9m04=kL4b8?RK4T#uft{Xf#FH%hnLwoHfO|n=zr5-(a7;%%uvjX_) zEX`iO(B9QGHHUSOc-U%e3CKS)B5+QV-x8(K(#RCsKO^8;ug16t;zc4pdJ?750 zc1I!c?t2WcX}%?Bt&p5zoC)%Bog#1^lwNT4T$DVe$3c}q?shx4uvDGkN~ON&4vIhc!{3!fT<>qSoU2~`Q3nWfK2 ziVxqCc(56bB2iAKolmt!j&eD$keuN?+D;Y7bYE*5tk_uX+BwECy0HSl7pF4%Q%?_m ztJcEr@Ke3uiuRWqhbWbUolkm#X0I$k&P|@BrPScBgt4O(i%{$z0sl4)^Nu$Yn-i3q z%Y1MY9tCi+(9XiHj7}SGBxX{>sqc*G&KrWOSz-~JJ*rzz_RTP8Id9#KGtrHb& z`d?6_P@WG6l4!Z13FKy!ja*QS#h%YMEy1sY$!%{RMn^AETE|#^K@sE3#aQO!{EAnd zH6A}RYC>wZ961_*p6W2V(B7B2wZ&tpxBspJ*somgJ~HTja{WJ4Kf*I_k=L|Q;u6i;aXj*TTrXvomc*F4NLJF!8`E!ueR|aT`VeNaGs=% zFfQ9Vxx|eK0losCDSTDQLtZBM6RE{tT@J=4mBi>oHzRpH4=@IH>MPxasbT$AkWjx6s#}_e2Y6@ z_X$xB{9Y4;(F=7FS?isC8apfuX}rAxKpg+lQz{;_c#hACXS?)J*7`p8r02CIR~h{+ z`JpC3p8Bk~{Z9izBX2%{nr20oEt2HxYlxU!w1HP=EJ2`q;7E1pg`-CYwCNY&mI!hq z11}tildoCdAiAW6QCg6+t1sHJ8@eK6m6joqZL3LkYYTZY~l}vM-e8SeKTcufOdGtvBT zF?U6Fz6)6AFY@xGI-J+l7%g+@!p@ItZ&Q&p7M{OLgtNB3@_2jq)G+dO$qF5(J?Tei zL4n&fEka*@SDZcn%HDHTAkNr!cc1;k!|`r;p`V8$~kw3!l*C1 z>p(MNNIQN|2M;*g=olQjBBU{${Qi}W_+-EK@v2db{mJ?6X5SAF!g;LOIK+fWhs7=&?vg_&N3?P=XZCMOwU(=^y6ZXb2#0=;{EWMr+v{yh zs{xpQmm^z4<-BgJBph9_)Z^fqMO=TZeSD2mq;ik=HV!9arfy@qA_KSIE&s)R6qlyJ z!d!BpNOgMy2+8m2`JBg;ycC!T*bka|L;vIC?4s0j3S$Ka=Q zxjj#igrJs^kw5wP{Dag|>V`1-CY}Ngsc_{)I;bE)iRSQin)FG<9*!s8lsG60N6vV3 zzD^6@z?Lxr71)$?G^DlT%;Po-D>e?KFlisuGI_yDKFt((__BB{>Eu9{lSzS51m1?L zh@5x&a!Z%ZM>sQ@nU9j+YSY~g{Qmo+Uu*LrD&stq+y-iOcV*mTa;r8TUnpgG*bH8Z zL}hS>;ip)5*IXFlINW}bkk*7arv+DrbZ`^WBohkp1yv@`o0pFdXyWL}a7W_g+O=fR87WjfmpRT}wMeWjh<+7Hd5@&s6}PgkaYM z_}0QB19Q%#{K)<0Uj#nAcyxZN4k=a497V_^$lgL@N0hPm@(1Lx@NS>=Ad{^p1a35% z@+@-d%*5KJFhlxsGxAszbA^0WA24iueCGKt(QehHgN0UXf6&4tQNfG3Wt@Scn}KBV zru#(_HfqvqteE@zDREDkz2~yW4pPQ|$J_;+prC+BkT;x79S->(>G=@OW}LBZH~&rp zhtu+=qAu6`j|nbxKs+ly@H8NfWs{f6&pf`pymxVQ6?}g63rK{bCHlGm38V|aoA$0;<%1i)b=bk?%l3rVj0n z)C%IQHMBBl<7a|>1I>$TQkHBtUYiJ!{-mW%CZOYnz*`%a-1qyzknWO}&=I4ZZ@B;i zd_uz>kdr4IbGG$y!MT(M^FEp9`cCOw3PJf?T(V*hfx!&6RX^-=ElB4$b6c-SvF$PZ#L+ z1XsC1b(PARG^I1lkm1$!zq>%9r4*WP?fz6pd^k^`>fAabs;uGbpF4JhzQ-&uf)GL{ zT1)+WE)}9*awbKhsIyx?q@IV$G%Ru@-I$g@9KG~UOiV@p-BlLNn~Z)o8Ihv_VZgpr z!w9_)R@ijr%-9$5I1i9lzV%IHtY)P{uB2~Wa}rHS;r#tKtY39sz{7sTK4%+`xyVZ` zRYQ!FZNXJr=t>EVV={4M!EZxs)D$Vc?&$~Lo39k^=1JVQb@pFC6-(3!QMQu$E6#Z| zK3?R`&5`v=C^dFEC+XVpqo#3UwHlj<;ohh1brqr>2OAq-`4xZVa%f%8h-i&ZKD~+1 zJf4&rN^wJM_ODYXd6jfu*mvX5S0rBYA*}%C8Q<*}JhOkWlvfuE!M8kRCl2W>tCNIP zsWMFZ7$c_u@ws;;|30!%PQhl`lp!9?TZuH$&mQCKYbftDec-G7{rOIyC6fG$^>E`( zPG{h@V$Nl^t^J?QE$JM{?M=zQ+G~@+shL@^5@_DhIB{2ub#e+J4XR;i z!Zx>K)jLZbu4GW&Bv`WLCQ=1S*KLMGXn#^J7}R)}E3ODIc&R=dL8fC5Bz zl{W4ip+Gk*+mmZnu;JX{6sWEfBvD`F^P5f3FNqN2mD}o3S3Z45ApvAj7q;iwXyluv zohGN_u%cp8D~*RHOBZe-WMB4(Xww_}RprJjXLb5Te>O&k;6f&<_7F==2bTJd`U?B|FfkuKQ7xZ;0SpW&HS2l zv3iMZAWczv+i4QoQ-)ty)`>Qvr67+zHnLZwisgCt%2L`B>ZlmpDLA-V*FdAaKm~o8Haf{V}hL@C-3#nQvypNFhdlPS)uC;nzZU{pouZT*?>cYw3~`-y=S-b&o*y z@(bpLv4n*j?-SyGAmeV}&FPB_-ZI*6fbN=KD%ml85fs!#B6}osP99pggjGA%+JmBv zm$`|&nJNQKm<#H;tvlxFQUVu1T$Sc-BGAnJYYMpXuJ*=L+{J(YwsKFss+gt-!n3+# z!TgN#{!&w#E)4dB`c++_e4Gv+Yb2gbs@w1P`!E?;3fJS}e*d6yEe`EnG?+_7wyHpU(pReM9LYzcVbf@Lf;3VQxE-aDImit09;b@NS(aC7Xpj6-_+5I)o5WA(|^%6mfeg zbmfC5=U=(;7C_tV*79wraKPYoGe$q(uT(m#dU4AzI0j;5$E$BzNsjN^21Tu=FaRP8 z_`9MUV3r`KN8jjI&10W0>$Lo|qWl+t4yWhEfBpngXU8>rZz?xkEiMaLJ>eLz8a0Js zC|pYqnW%kzw_UjFlS)?}7>39M2Ay8f>3A-rz2!qoAy?CR&BGISK3q8m1!ErFh;?Wp z6#n`0K(kAbq&qV+$1<*if@neA5rae z$=7+tJ^FrqDN!3jD^m9cidlJ4`@)HPBR1Pw*Oy-VYM(rV%1AP};25|`1ZqPIEc2r7 z+-OeWZDk4f9Wf^IQ6|yvF%@~FD@h|2VFZ1qa+wm7#&=& zL0!4THtRCHSD${@b~*b6XMB{fI-@pPj7NDR+VB!M$nUQlPF$*#A+-*uZ2q?V(;vz< zcH_?nLwiIe#8bZQx*6VjK8l5#A4+zOI~?0V@7AGA=5&eo#J(-R)1vGVTw>+% zwO5GL2z4*Cv4PKz0OEXaS74uBO*-@6ZNiDMq8swye<3>w1ea!`r!k0|^c+l=GkwzE zUvMoSdGZ!2Lom9YM|^uvvpNEo_I}*>sjIJyOiH;(#u0fik=vVl$U#s67&4dVExwJ< ze?5b`{*hCYV^!XBRe6sEl5B8$)$C}(`26_F$%*KF^~j=I9m&hrZEO(Kg=^xx>e2ED zoMFqj@zOjUX5bhL_it|t<2=613y~7SxC)Ws4IIp)C=`zEYd^xqBQbUBZ_3HHfSHtq zoY_KdVf5@y)yQY$XD^y256R`^g8KDf1q5zS^SE*JXLT6jC7i9- zYUG5zj1SDYIr+&+T>z#!o~ve!m6SOTIzu@RJUnW%ER5)c7by>si6S3b7JGht8aNn# z`%F}`AZb5CLC{*~&z1l7rrgZ-m}?)OJBnU-uYKJA+>6T%x8(ta*q1Z#I(feQ9j$w!iyj%-=TLl4%^t|KhK4qaa(gg6`P_alEsN6|jDQADol9V~r(xx` zF)%e(*~}fpksjC@TC50>ik%h|ESy+1-5RmN6j3P6j~~X3FL76)?cS6O>P@X>5$q8V zm{OvS&xzS`NXv1BW361HDrak^wz3Fzh_B_2jrV?quuOnUCugo^28c$AMAc~x_TsO5 zNCD+jra|)!drGpa-Ms#M?_50Xu4Y@9n8)DMWV{RI@Lb&xD&&^Ni282CE0gnXs`|~B z1k^j(agnNLpLT5Fa?)VP@Jq#ZS;qJ_o)NGw!#x|^dD+u2nX_H8CdJVw2G8>C)p%u9 zs`nZ1s-65Ew>~{qn(+<-Y6_<+H*q2F@zi=i-6gwA;C};I9xQvt$h28z^~8A)#v6|H zA4w~Zh$!t6-}lX)!PV!CqR}#ScG$$XLmFM!Oj_qhx9M!{+-F}z1k{??agrhr-oo;@ zN?(@Hbfk`K)5T)+J=8B}|1<+IDRxmsHx#tE#rgj60jRx+TWuaEk!mLr+HV#9&~?3x z@D!IpaqmzkK4@~v!j&C3f>1B3*Ed9Io=6hTx$L-g&cwTj)r9J~8c&S)+gpu&^BQ>! zs*^S7D%uv$@wY_EN~>(Pjp4f_?dms$%4%`9#i8 zHNi0BCxwf|vRSnh7q6ZG7C5+xoQL~%%w{Ss5jY(-YDUXSoV^ybK>dzR`c!B(OKYRb z=8@LJHiu=>yNd~oiKoF=&E-LNZf-?rV|vWHp@+;*U@xV>He`yB7wBW~rPucD$GzdA19)^3BcH ze8EtN=XL~6@y*W-S+&al9zBFd{wvP-udQmdIB2aBP@)b7@r; z+?M|>73>`b`p(~f16MSBqtbIXZmA!r_g{?v5v-#t590IlJy^rB<|GR?lX%YxY?z&( zfI#ANAm^YqyBgjEe1saHA zW!aPp&Y2k&+Ryy66AdSDi=XxBgCkp8D_tuD=X`*}+g}aR6x6T9kmTNtY~y}BOO|uH zmS_&}^r!tTI`5i#5ctDz$xqLHd_K6ChTQx6_l@|31euKL&+8eom3|S@9S~&8Ilci? zIn1s4cEqF|!lcDtG#q?=n0l|E{O! z%1!%YlMd;~%csW%cuyfMklImjJPq*(+-1z9$fuo?%`FOicv_&lxnR zLNnwu{{8}W+*tD6Qxf(2yo~Gfgs_;!?}NeK{YYs_qNR)sCgFc8hJ`s*O z0(APVcJFD9YIew*GQfTfZ%nT}Yq!GVvQcLRL6Xw)U1*&^lF2b9cw;Dy7U@{NdqNn- zM&dxknoTB|!XUdhR$xs`G)26YV0U;E_@h>*_A}6Q6nN?bltlfFxqYc34iNkb7PY z>gw^6LuaY+obY5Br{ri1VUC%G`4LFU&^5=^E$RgXd^6f?j^`wuMK`cfSBT_`tMfi2 zreAIq%R+l?M>P0dMDWtq`p-pBn)zv>aE~sdy}sP^y|#*i^{Z0}09qZ~=m{di(|m`D zIRp!C$WIUw_U}1|qE%)iT+w_-6l}^xpc#ti?`wmp;`E-6hu<=T=Gq#L==4)@zB5rR zSK6W5i`{+?{o0uXB`g#q@__~0NjBdN0so=L?>kffTqTZIB6*KIRV*^n$9t$reD;Li zU;)9W>i$6rF8p?9;jcb&;Jrf`j!?%o-xFd}{=04rN?{0?<(Q|CC3hfJ#`H)K)+^!wETosd^P4Gt#cY z>MimDwH6M5)W)YLFByvfz5-x!y_oe=WMjIlrq63L@X-tidMO}e;PK~7z8d`17dWh! zklY!zxPHOP+G84N0}zl%eRb(^TV-nV6;7&&(3pmxl5ipW$9bi<6+BSl2oQrs71dR& z_<*Q9Gd_RZS1IWxwhdm?z!xU8hcpl&LBPuhM?bV*LxSo|%p%Df8hs$W$OdRWSdbRD zU&IPW2_wB&_dz`R-LOAvA}r_MFZUyTkj5TJCxmpeF8g^9jx{BVHz0wJB^!F71lUVJ z4~X0E{WpC3#R|gj0YMrqWoZL_K0A(MucRV89HS6y5qmPS9k#rTfM(THH4UL=2Rh#x z>Cgp2s&U6;8`Bfl`ON9NX}^)MXtodC!2Tr-G)$-xv*dCLSV7gBLZyI!T%Wyqv%Bcr>Fr?hz)%3cfPG<=J`CegvF#go~B(FJdfwCNTK zhz=O`;YD0j3Z^(2g1BJemls&;V&JrWdN@MZff(;d0&f;z|I~-L+zel5=>?@-B1f@; zTU(G7>KZfhpqz*^6DND3NI6E9$f;O(H1{W*iD4*~8fgh0R6s02mFhj#F0Rt)1;^KF zdmGFfcF$@A$N`>)aFyqCKP<}P7ws|EHKfB5c=*;%sOmhH_cwuieWQ- z^v6eY4f?xYaioG5w7(d3)6Y;zn3MV2I%Kjyt>Ha|xImqTs+7!V%_&9ecw3!oxSt3F0hRtC$Mm|4_~X zkZTW;4?z>(8jp@4AkmmKq-$zsfnuemM4y9%fGJP`=ll1Qe;xUk{6SpRiY-^9&1tyP zQsD?S5!O|@&CWye#3*0oI8hL$>n&u1V!-RK;}E`M3d3m0tdBwf&BMMqkBvM;YCZ8< z9E9xXgtshG@X8Cu+T^Z&Me;Xc`O1hCW3_< zZw1K7p^ZdgxEKg=`H;>0}v>_3fUZLhw;qco#F4bZTiqR z(|;+!8qx+rp@jP^9T74#6MH~xdsURzv{*jTW|vx!s5F=^GSa0Zv_@v^kH8c_(11sL z3)>=0n(5CaKMeC4B=!$L$SO-Zz_q^=@JhTJ$M(1}A%VzGcz|CDnYtX)x}vf<8DI!^ zld5v3A37oN7Dq(JvG4OrlVw&A>C}o%S~4yK^MW9ZC!Ba_?j1z$?sg{`A)3x$IC)jC zOT^@yQ`vmuuLKc8?2zxB(;Kwz27e0BKRltm6wL6!8B)jX+wYdZEdMcB;mFY28CBi( z{hs~RAus@ON~5fOo~w5OJj|1y8jzlTf4f;(5d?Q({xhw@JGl*{skdd^T$P7jl{zH0E%zUEvv)%mx<1S`Kh*x62C?}y zne8kXd5zsjO~^qG&&=I|y5IVUJp5lzA&kDD>1b7|oStK0nwA#Ah^Wi@Lll({T2m}- zeuWQ8@4(TcKMFz9mEsLBUEFDKl8u`v1&x|(^@yEI>e5hB@Kso6464Ye$ukq^xYsz= z0RjfU;HgVGQ5gjMVPHJHXWYmw5JH7bQT!mT?>TAZM3(grQ3II>azW zPc!B^mc_zJLtu3~TY+=8;szTpGyG#^&hFmr}thlH!09GR1&Fc{eX~cep)9m|M za3cJ{a@TT7r`p)20OPMtYL=tw)Q8+B!R4F z)KZ8^4sY+j)iPzNse8I++SA9Vq z@^e!AmJ*4N5t^l0mFd=%=4A2!%hXnQSNE`_<@DvgOoRc22j+gF7eKcH?qgb?vj{0yH!7Ibp>U}H8uq*mxzz z!C3A*L!MTxjF7Fd;|;0V%2kDaAZ&y+t2=Ue${Y`>+1PyLJ>M*uKK6hsOn#8fB1?CV z@EF~6Iy7bi;YYr)w;Jac;0bZXBmho%pOL5&euB^hyWvsK=aHQ| zEarkF$WuFj-0WSy-c|}h3GoXcECPweylL1eKHpH7Yz9mmzOIwn?!qIay}LSLYVIm%((u;EG&jm{yyP4`zo2;vJ`E#7R6Qn;x1A|k{P(-j(i#~}_^53MHR zEpdFjQQ2an!(4>K)NC%3C9(K92o}vTQI=u9pPx6>&ii|o$3jEdI zxxLNi8WfkzMSWZQCtPa}6ByYG0Y17+7RDrYAol{ovbTTv6wvK4zP~S|V&&Db@mry7 zJa_bLtSQwiI}uYC!6gW3@=yt{nV?wW))60wo7EbHD5dv}5i=wU%?r%{@4yziQuLTC zL~PzdkfdF_W$rX7dN4`tl*)7+-j6 zy+v!OY25f^^dVC1S=}kjRfaVyb9${h!!~5zv!wqy2t=$b%GYb_;|Wxn?WEwdD;< zjuk9kM+eM25F+{MwHSg~w_b*sIn>>pV7Ta0-wMxMEuK3))hq^a_W0YG>q%$pG|V5i zZ{rB?toQ0?t#d#>ceXBg!UzHU@?JT=0Ta=IJWQC>G!!aZ==5-f@7$i~z|aT6B$2-> z#&Vw@jYQ#3Gt&g9RsjMuv!(h!T@m}N0iZpC9!YKR*Gi@+d}$_}($_7(C8E%JYTa<( zWpHV7@vhLNpcYE~ALpHkm!39xJlk(>>D>Fvl4R5#}Yh-xp zNBGazf+X+tjTNw}ePT2U<_&qptR`iws|G7H+U&Jj3p2PM*K_~g@D$4EhF8_@9U@VR zAk8ni{C52fR0cHN%DB^~7+cz8IPO(TWDb8;fMIFyI$N?O02$6#zMlY*9f4iPXfr_( zwNVv&ULRNgT|GOQy!OEGD3GwJ&`_*B<4_0DK-_4{(5{~6f~$$ww*T^+tb!Z)zP#L+ z#qZ_doR|qSx#vjZ&aldz#pHea8@*tt^p7);O-aALys--+wsBoWte+o>PrhK%mko(F zQCHQAeCG~>1Hy9>yv&RoR`g`{rrK5>bNln*Fti!lAEZkC<^ar$7E}`e<~$x7IQk(v z{OIV=OL+KeEjN#oc8UXt=}?b2*%JWL(|B^UZosCl$_nvle4HO&SRO!x0kaI}-UO1T z*+AX5g)W~`C~CX4%~*)QCcTq^@Mk6d8;?d0oELO`yLWv4p(QsdGW&Hxaa_^ zG{$fffg6kuQJ=m+a7feSye2aY#Ho2J)^_8U=B_~1xt=)7 z)5)tlOA@B2ayl93saIoqxM(%~R{MhUs6^kHks3%zQ5dYf0gIGsdUO|%1uxOtjtm5i zR5^lP~`dvD`94p0X$SBvGDq}0xfZ#LrFUfrS+b)3ow3A>Vz^I0(B6Y1Bw_Pq_- zbf&An7~+=aee&VdgN)t8v_%=$H0c=*%hawpg6=4Sy7DHYboHf0IF>dJb>nFBm0i?3 z4Dmglch%B&A_-(`Sd3{ka4=%a`}kwq1_yaKC#fE9@$1hB4##oGO{*(}iQOYNd+>8RO5owv5x*++#$h$$}x z>Ym`yr7mZf_H#7-1~Mwj>;c#1`2QpJdZ-4Pg6}EH*dx@tu;3pywNn~nLhyl>+W+aC zFh@)<8Pq+A^Fdc zGS%*OR_Lo+YGzig+N3evqJCH)gR*TqZayM7R`TN-WAD=iI|Lww#m5s-G-b#Oc|Dcl zw&UNK-a58fDWfUT61#$|R4VbE+sN0!HzuNJpE5JI&?UR5_X!D+WCgfDZYU1agE1qv zw^nR9pB)L$PZf_lVueMB!T^w6N`2q7hUa_Za~d(!K#1-Ls?@7W&?;xoL+Xg>*3c|; zv5*gPbPV47YwFjk%PONJ&UxZ)p)Ea%|G~%W{8Nji)>H)p#j6SwSodt7Z(6cF8|ahxT4@fPN|O<0O%#Pg2}J=e|pB>l?kE-vdc?*l;YL#CQZhFXH(8 zvO2Iu^f!A|&Gc(c9Wh}VvV}FG5KVx|NUE;#{P8sV|GMBgi4dz{C(_*XA~i3?aCD0$vt4w%?zHvZUuw$RAy1_G2=21b@ODC zc)iHn^e4;k>-RNVxl0hu zdv64=SltTP8DuSiE|1xU6w#WFfPj^=A|+r+|M;3J>ZR%2e_wifPFLR?w1CDN=WWBp zQ*Zw5xOX!CMpFHsuZ(;ize{MgK1j&^;T2rfZTlnqx+|(2KJnlvm`{|F9W49z;bZeV}@>^evqyuQwe4q#|tZD0(MwkW!1Ax>G-#SmEBLy6WKC&Mn~t_a<&Jy z>+bHX-Wzu$s=L>7Larq^_NB-BH4g0y$TluVQl_?$!x_{DZ2uRp0j~888JG2v@bz_J zi8~`A5mOAr!9c=89Gxv3VLM0O{Q-jsw(fkbf^t$w3e1hHWuXeqFB7))q9K1uNrPE# zv|_vQ;IkkAvU&Ezkm}i6Ac4t4J&2bgO-$dPiZ>A=KQEvTB7Ioqrv>WCvYL2bEjkvp zDvH+wYWu0Pk0%sv<1H$wRY)}{suaS~QKABA?0RtF@$B|CRO^!$a-dp2{JUIlD?SO^ z#w`Dr0!u6VV>=t(ua$hHC=t>58nWIm3H=Uh@enb<;S4jglDUWG*|eGQ)|r$o3UbGR zNw$3$5vcMjaib&PS3e?8R{F*7zZp3NOb$A37rtR%*W`e{zQui=DyZMcUlTF$yLhXe zrO;WQ1*!SUt+{s&Sc2Eh zrGqt@>(*f7AFFso!V@?8l^Kgey7D~~Z7+9G;X9e z^7zS6IU&=VM|PfrIiAmPl*V9cd(dZ0xVYc{hmz&4!rEC#7 zFSId1nUr7=s_6f;5IBND#>XGQj<8DrvR?K6++21i+wP_f{JToOEaLZHI5DUg^jcY* zK7-EBS3*%;j0O1m&M#r#;;WsQp}831@QUVfv3HzHrQ#06F2CAEGjY8K+bkrIe_5`VF&i&# z3m{)kR1L$%iHxhTW#fNn^oF3FDG&eNcsVaC-_sjcVZ#R%HhhGQjxP4yuIGYOZ!W&L zmWP`3CA&d|!Yo&QcjV2iRVp>eTF!1ajhiX0w9IvTv+iF}s+%cMsEjsda23;Xg_uK? zVGeC&*0;TNcV+ue)xhPNcFcvZ^Ma&ID6=q1Fb5UQeBSU5JJsIjhnGK`yBW5*IBl(u zi44^7X;v_sCk~5xi%;e=IozLMFH14-qjnM)M)GBEZU3?Rv~j%-V^P4O$xBs3tz$12 zNl#W95*Wv1=VNK3yP0h^wDg)Q#SKqke=4_*0!TBnY}md?7}-A`jKB$s>*g%`{0qA7 zr+q-uw0QpheJ&D#b7!3wXRhp&X`NJzx2V#eMM=d|cR#C!h7JisvdDj6Hs%mSnZKM? zT|;scJ-&02TB2X~Bx;pO{cCq3e|&2bB46WOB?kM7reV93!^`YRg9zL%Q2POjvs*2A zZ_@KXJti4EA2uGr8?LO&g{&BiX?cdguCpuw14=9Q4#6kzNzLX~2viW*?lk!XSC6K2 zF?aIh%mC3O)p+jpzer})pDgPsNHt-tBsF4HU|m`> z%x68HQq4Ckrim-ti01m64-dr^iThJg@&F;&b*;fP5_jp%)Fk2wY{!dJGCVSW?&#Ct z^hWG6_^{`Tx;i3g`OW5;$!uPWwkNl)`<=d90sHL43jnL_0F~M$6@^n2riB7-%gOy{ z@;pUSXSUci>7W-n{S@x-g%eevSm=;z z%yz9|H*)KMq%INVu0Vwx8`sgo3VU7_rq_8 zF+6-7u7${y*W428EsF&W_17gH)WV+8k9Ua2t9&wB%@vTiv{H)@LnAka%)~zj_h2&w zMUuN?z_$uWW^kjz_OfBk|FxOI{=wnf&l~V@D?p_W!(&QT%8w=;(m-Wctauyo0T+hxY3E=wHzCB#v6n=k_ z?GGgJ2>J#r^e^(RQCUeIxs2fIf6Z~n1Z@>Sui#L?U5mGv&Zm@h5nihsso|}mlBRKP zLSJkD(O`F@q~JJxu+4|@czIblS6>RhBe?1N=-2#>yJ{ANM}ubBAeQ^H8!E zCRN0Z8~=d4-ey+5viu<{W^t0URsb42$*klEwH(So85p!wtQf&?cbmeB&N(Qj7d#rP z=S}Un`jlBLZ>C1%AnziE52AHaB_y!)7k+I~mY{X+u4sJ$jhQN5UbT|Sx znxSXJSIY@~sDYrYE*KMu^DtKJ^j(#fr%s_4&I2X3LfMR@85Ykspu#}4bER{z z!TYtBSl?Q$2f>ZF#0975l^NSrIVF znW>(l9D+R7fMSM9BK!Qsoci6v27B>`z)H@Pu|(XEI4yj*%-9hgV4sJ~_GYKCOdX}$ zqzgDY8l{LV`h*cNcdp18{f+6AfaRoe2d{-?CWLMij$Yt|WmeVeu+}vXHG^UQ8GuD=kQ8?E20$-JX5uQo6#G(f^JNgDp~yw(ruCu0@W9z^gA|ik_Kd zTXvd1NU(I_iU54PUtz(|2D;O-e~TxVFTD(7=~Y8B{A+LoXG zk-_f3hOgi%veT6`iJLKX*ccp~4z+zR<0>u;&^lrAg=)>JenpMZXD13=4M^NMAHZ`I zZ8wmAz2lWvdZ`sP|Ld=PEbwDTPfS%$7#%F>NqVkefS7>Ar<(jw{xBiPNoe_3$FB9$ zQT-t0|N>Pmh z*w{hvgoXb&Qrp}CLHa{Jx|Tjpjy}$qt6t9V0~|kg{MgZB%14hY7SWn*aa*1MFI{uJ8d-<_u;Y*L-{(y_|usudm__cQ@~=j-Jkn X9$qdfvugX`P2ila5w1Yn;okoNnZ@vJ diff --git a/dashboard/origin-mlx/src/images/cancel.png b/dashboard/origin-mlx/src/images/cancel.png deleted file mode 100644 index fa068c2e71e1ac055efc6210de1e75ddfb866eda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4468 zcmZ{ncUV)|+QrWagc4CvgTQD;no^aBIu;xQNL7%2u@fL77Q})Vdtw^}84!?>9z+Dh z85@oWD&#s?P!tpkMM)?IMS&nF0YY+DU_QTl|G3W+R`%KXy=%XFpJbhfXs;D6V`)Fo z2!a^v=IZD}5EKk4goX;<{>n3Xgg4cV_8#^GaV>s~EQpG0gAi9A4}#b?gCKav2x1UZ zyblDin@JEIY=T&nLJ+#!GfKS|69hTrZa#GzJAJ{QZTap8w}i6&fnsuwk@H*$E1RgWqk~fDX}ykj-wvr=zwbGXSvM-~4|p zH#*a}W(`WPqOwVB6AmK`CP#t))W16cGjbsKX!Iyh0ta+HI{3cXQN!=5`j&Gm)YaCO$=>m%&>}t_)=}B`eocEMmHE6otoZSa@XOls+Irm*U;WTC6m-6+ zZS~uky_gwl3fMD5Lb&?+LdT_|q?zcsJKQaq5pRuYFOlY4XdQ5RWe= zvn#829CFWICDdo_-qKOEFmIxDgYA*VRLy`1bFakRo8=hmIcU}8H|JD-(IqWi+f}A$ znG9a;;z*pNGF)+?x!rZuE`k_Wq5LD0Eyqp4qr?dE9j zx2K^qbATVaSJttxf6klsy~6H|YCF^te} z^q(Sjw9YT@>@41TcXwT7cz2zAMR8TQZPV9nAFUZjQg02%Wp2~C-F0V6&GY`xO`l(1 zZ|}PMB9Nu}{C4}@Z9lg*J{-)t+rOkZVP<#wnM3N5cDedm);EuEnL*vqp*MVWmcj63 z(Gz(O>GN)>`fJ8P>CvNcrAMbF9vUyniF!0v{MU&$8F$4Ah8yD-TMS!>>?0b+wtnb{ z=>0KEf8Rg98NaYr$<%KamZ&c&-T5tKzjMX~VpnWm_uFgliypF;e6gbHoj=ZPUtz_N zJDw_{vt#}tfA`yc{+Fps>cmW{UQQ;r{ib!slKL(tHRaqN-1&z#clG6Y-dyZKI)`-% zOK!Kv311BMeSDZ3ICgbSsp8tq zXGJP!YQyE3>D!jnc2aEZ<}uoZCDlLiKkYfn$WFQ3+x_<7(`%Ol>d4I>7b~7Uoy+e& zaDtJ2rVAe=hMN3OYOXgWOy|*OdA43=^gK#2k|^o}{y@m``y(UBja4 z8C>MjygY*y^z4i_xw+jueSpE&0shGWxU3SOU*dBX)y(7)K$lQ}v7Z6zP#_bGAY&aM zn!yn25eS(BnHr>^8^qq?(zKlpLmZDomPSJyeuda4Kl2@HJ-d!Y<=FknrMbrK1c*Q|H!xR|`PwGwmU{L*a&xws4*E0nYvxnbe4-TsN>-A*Bgq?k|FGN%HRJsU@_A$ZaJH|# zGr6>tOOK;Q#~=PiljX5F-@RQE3_aK2MY=aS^tGJiiE{mhDp0ZGeWVnAe)elzaYir zk$doPjhRI#W}4k1WW_mk6p1j=VT^#gB?g`hGk8Yj+`?qSJ(_^KF$SJL()|eeU9&tw zw%^Bdhn+&zY+Txp6QYUGA?XrSY-X zP{;5ENd5xviB)u-!cothP*gI#3HhX8G->K|kd%7HexXSCQ?X^1N(>w)zl5W^864}q z;5a7-jvJlUk<#ke>i`-4R8b(|1W}y_(U=a=(t&7GA@m-K#5#66Db;nkLC7raP=7dmyGt4(g0^MMRFzXca$0Gj}eqFyRO6IUf|#eHdp!(a-F1e0B7t4 zxS|DMRxVW}Bs2kPCIU1z0T}8EaBKn`(~b6#()rG96iGx}0YHNZ0Nru`o_AD&(MoU< z9MfmuMock9W9jWLHgJy?ndYg;Jo|Hn46$ZCX~>L+v6!ofiOYa{>N# z5@7fQIIc0?MoNoassJYJ0XX9tK>rqiw=0yOCccI@HE|POYg!Tt@yB&qnxbQUXU8Az z%NjqZsv+y_HSowr_^h}J@lZtqrI_KTWtD)RmUqrTK9S_u=SiwXckn4y6Y7yb#-#wA zC;(5I0Mv>GI3W?>Boig*3h-qTehX%%B}gC-H6&1q6*6XKDnOs>0FyZYX_ZPa0gh(I zw*emKL5`h-EVXXyX9a2vJgv2MEnhVEa4)xKk0^q#zKJq?VtAT~nOz1Oi>GN|ai%vs zR~f^SaPqE2vKu)^g99?7g0i>${G@OAzwTVSwIi?^`-I#5B%0xCC9Umh3PR1@oI_ew+ zXfy+kb7SG?ngT~}CLE2}a8wOJcdEfn5O18iMz)56F7hzMF(n0K_qtTu{kVbv-c?I%ri8ZuRyy{;z_Dp z#J07ve*k$l22D>Zgy)n3c>aDK`@Z@Mo*@E@LU>yG;mhz_!D|-P$_w`+%%b0u{B!6^ z8LwkFU_BvEFGTuLULj7VTi}~)>4!K8@D3uSflGHIU>V6eJjGZ)e?mUwbQ(LG?pWwKHse`1%_F+7{yXPQ*YoHbb=W^eES}fEdsqW-SOAy=G)-Tp03? zhi(E6uY?@&f*i$TA>bGm4siO0M2f8f%vgoIbFi7r<0f+u7|Sa05P6k&0eL%PDL@Zo z{FRIffIqtdBqsu#WCGCH72wm;2<9n9IPdvReMqF(M@Xcp-T>{5CSMI-Bv3?p4hkLr zSX=rzBK+I)SDvK;S-J^F{j==Blzj4)u z0@F@=9`3eU(y~x2v>|QT!n^@>_ofGkVYd2#D7pO4s`4GOC_z?q$)_l$;&qRZ6mCiL zEvhQtdnZcJpDvy*E+-B|30~zbtdyPQb&r$U_iFV9s%F`W-aq)1ZYK_$cF0yVC^qN~ z)L3uJ=C<~D5WQC>@fni8#EW|awSKe}C5!#V?`r4%OQ!2Q#E?7*-}UfegWQBS zQ0(xDaaCHp^w53TS?4E=s{?Pw^bIds;QwB;rL zb%k|G(W2)sFkTbDC=2SXDXMN28l3$l?rZYdH&e^D)HRQ3%oS1(EMT^kOUnm}KaE#x zt9jn*`@))%aPY>0OI|07SSst#G{Tz&`SC(7IQ1 diff --git a/dashboard/origin-mlx/src/images/checkmark-outline.png b/dashboard/origin-mlx/src/images/checkmark-outline.png deleted file mode 100644 index 11aa4ba3d3b3bb5f9fe56943c1deeb5cd59a90a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8085 zcmZ`;c|6qpw;v=+At5nlq(aEp(lBVOAxj~I5JHkACPa)a`x1#Hdx^4C5{;OIvCl#x zdkJHY5r#2yzvFrC@80{zeZ9tf&pDs7ywCfb!H2{v=7v1nqTC=5h{xDS-x3631w>X5 zCmZl+Ej!%_JPvs3nCXB(@6r#^T-X8qgqxA283+_A1p-CJfW(6g(e8Z2D)N;)c|l%>FtH!+rWf&(cVsQUx!#E!lW+Io=(7jKZFU7`2y7aa-sxg+I^6?e~nBB98dz<(*wpcPXSM{ zUL1gy3HYDzzD~eF1mAwNvr`O6{;#n^w5LOEa8R(VO$>(vNC5v&?;Q|)7tjb8-^B#~ z-!IYb?h{xnpfY*u>H@0#15&iN7cd?JlK+bnuy=x(p3F`m0M9*bfB-Nc+6xfElmU7H za)bu406$D-@BpfRfdOFtm4S%>M@$0u1$>8iZ?6~;7*i*+;{GY5xBX;q?>@-=TKM)8 z1nlY2k77UwzWtw~OpyDN0@ULKW;=jCq^BLQi!fz??R~=gaALsJ0P1>}K0pR0Crk&N zD1j;bgCE@6wNDgIgn8NpCjAThpOF2vVI~38{n$=XW^4a$j@Z94b6!ji@xbYREkdUV zkZKry!4ovL&Cl*Kr?8Cl4bJ>6qh~aV2{#Jl|pxpje z19bfh5?Fq*H$&0DgO0K^w*s+?Dqghl2#(Jwd)J8T9i3d+nfTFKRr)w4z|~Sm?ih=Z zlKGv47udmt-C5$t!bmqm*+Xm+2Degb1~!+woe}zexosPNO3Y3=W&D-D`Mke9-Bz6U z(!=I;je|T~Nd)?K=s8w}psl3}2aS?ZbkFBH5pX!S-j`E+b026Ij&NA0Qym__F?}Z%pPlWJad9kaI{!_3>h$%y z_b%T^j4%oGSJ4$KDDV9AH2KO{Sj#n1D&Fe-{d!bf-i)NyNVV5jqgSxwmA(ycveP`J zUOqvGWIf6>M)HqG*%jaJFbv^>0!*;Dni%SX64)U|fWqZ(WEThm@wPF)Sf0r7f&n83 z%Gk_+<2Q#mubL=W4dej=iJBYh>s$>PSswQa5i-DV{9(;%Xfui~Kg?>Vbhbr;lSN-! zAiM1?=Sfbf!-*H|SovGPNBOTlnmL)#S#}~sszput7c1VIbvQmU;Jh!=+ zUR^kxrFvtkh;pzH*=D(7aTpS$+i?iClmz8{S9C83|A+rnzLfawtCxH&Ck!rZ5RD#G zVScAWm2l%^y|R`B64miNvGg?QW-26jZToP<4{_CiuaW`^27EaO^3GA;%UBuQL|M&#Ft{pIZk;sGn@rZx^#{hA9>w^~?8s5Yy5K;RJYJ1%-dL;(#c<7)2M?e;U_IsAwkWGXi$_?|d||#*WREXd zU!OaWEY_4SV2_SF&R5N=aYF(Jm}80!*}s z%$oDn-*RHj+c9E16GsjPk0q`kue}j#ncV1_{r*54!S+GF#1!qP%>h z6e@?{O0coLwGo3=8BH^YXCX?lj|b(Bg{vU=TFPGTlC*Mqy2UPsJM8RQ5qWY5u@U5} zu@xe`PJ=q;Uh{S2n{Ax~o2lZj@LONQV)Bj^jh;)`K7>SdS?Wdj zwNQ~@9_AfAr^vRXZi#j#< z0a z+^|2grSXE{Cm)%i_Zna9wUW;+55MgEwIXY@oMJwp>@0=xvac9T<^5JNvO>=GDmya} zkN=jWx-p7fgj(E+`jq_P`np;gu;JNf?p^^9eitxEmiOSYFa6Y<|uGTnOC{VF}Ev?%)Pc8H>TeLt%g+|m>JWl~T+L~xwVFO2IsHvJfyb(bxO^?Do>J13-r6yxCGfs!H>sxBHEve|&fQ%No`KdL!>6vX=5>wt8!d?ty zVv}8`1|w63tdto7o7G~O&`p2T2G8)LbC4k?x~#{0RT%UQ;i8R+S!(@MJDHTxR`4r_ z5wtO!z~wb&BQSnWKtr6;`UCL7~)|+;~7-9JdjZ`f`eF z!B0`6$$raqVzn@Ox9DItL6r(MZA+>Thh2``BAz<={lh&t156{c@O#_%2B`#fIKdWT<7+-hQHpE1w3Az82qgRdm-WRx(&kkZ^`{{5;y2QGpZY?y#4^XrDEB8H zr9nQN)ejFX%_7mV7}T%0prHC=CWf}=V=feSk}?K#%QdaZ#rMjEttxYPPC#9McF??))!P;~ zA%P+djLA;YW29S8N1$c^hDvjIRXqBls)4HV-JKJw$ES+z*mftM_ww#N#ARRDwKi3l z*N6QmjJb@t_U+Va~9?li;TOP4*W8J`(Eiht`uB$~L|V!9}W@9<*DPu*tgBEh7p z{>*vW52*ro)AJTzjLA;(oe$`hv2*X2oTV?&Tba5pJtg(`HKTD_Y&-*ku@hAeV+Fzkez2cJKg`cq3>?oX=&>bX&~1C42= z!T~h({=CXrg87^S;p28XD@=RK1b(cBkwP80TYW}jzX703Ugbp1> zb!@m&X`V|O6RK4y^$~yI=QjRoJZbG7^UXDIg63lYPN)_E2qEuc2Cbge28K>!8INEgFG3B)&elkR>T&h6h z3E8x7mm%dWR#lPJ%vEbJLzz^3ZDOAkde|}f**E;8;su|I1rC(VB}*+v5zk9!y_}Mh zGZelNL*L^VLH3G5?Aq->N4pK(x9*oF8F0IA*N4-|m%f#@P{oOL74MhHx>==$bX-AM z|Aek^iKy8++}G>%at&Emu+)T(n|zj(mj=_9ANlQf$Lnl$ES>YMZXqo-KXs5td#G42 zbse7aK5qSBNzau;8!C89^_$_Lwr8(w>9{5y_JVkr9^~1KpO{zqA5oM@H&Gsas=m0b zgXCVW+ek}&ykN4Cs*_X935j5E4ZLZ_sgSJC=wd0zqKMT5A@a#@MecN5dX(%|aq^Yu z0xCF<&AlKMrpx|p)^CaX8}%H9lb!qw-TIn@HV~FT@~krQXzEwI_)z@)1DiB>3Qv?} zPEqosd>j=l6J;M?lKkj7o(is4`krKykYch(OLY|=jjh)44W08luDWy<#br65g?3Yt z7Z6WxMl)1*Q_S>pPADxC(5>W)g>fCTQMA+to53iq{&ijYMP3bF$LLDU4D8)lNIFc% za-wsxAvQk}renSXa2y)D$K@EEr5QjUsyY4{>KL7(`55~y%1k@wgv9D^zl|cl)>HS- zpr<8*xG@LjLuAm?cZ0x~13yA!(WP384`DjWPSo9+uJhSRFdf(gg0U#fl?#ZnPCb)G z?i*gWju2-2Ox@ebM^FE1qNPftY$o0M*+NT2*raLF@C7n5er3gZ#5T7rMr!w6fvJyM zQUt$St~NOz!3)IHKey;nTp$DkVG83~xjA%-j5KV@#b)3HHRp}A3HDu=?pi9?I?}Mk+ii10k!<3=I_uXf z$Z)$N?z~j(>Jb@FfzNU=)EnkLgoH11U#sg+CZO#c_$2JX5GpVv$)%!U zw&twz`V!B`dJ5d~09MexS~&P8|r4m`gTRN=g=|cOV={udp;0-nuh?Ez)cE4 zqn+4m^KgQQHWmJ(cO*e`tS1|R_d9rn-q-9}WdL1q^wyeFWjn(-HuUaNMh*L}cjdi& zLjH+yM%^DzrH@v>S?V2@G}666`3ysO?v$!mooo@Fb(9rnHZqORlHs>5n89(@*QajF zci-}{AaUZ{f_Qf0>I#5g@7pRgAGVQjkI!KRo5$<``K|xUwl9BJr-E!06JhIN?!#~M zrre;OT5RT%% zA5j7FJ%!#D^$otta*_$vp|EVtiRDcs1L$-*nqwq$&uLEldfLKo_Xf1lijk)oYw=0{l(OAo##V93W04xw#%VCea)kV06^*f z3imPFXt|$CK*Cu3ZIKZ9(4k{nKp%xy9G6MO*kl;4&`+x-1bv9Ohjtx^!O=mO<2lTw z$n$?doZ2l(z8eg*=CQ;lx)(!sJq!mz{kqL`S`|bdR^$Ac8&G!j;hoWsP)BpEV4xpA ze7pqYS`zG46quP4Yg}xyxhITyei6T)^a-RtM%Q@rQ4oUd47#>|CqBppf+>>1Gb2Zg zU3^0L9IvQI1C+rPv?}>_iR^W6feD}wNyV$W^4tMaIfIx0bbe>%m#4FpyoCd2a?m7l z`v5sJdN>rSIJCo(o*e|5Vhit*92D>@>6TOjL`+m6hYMM<(8*C;_D}9>8}SM7JigKQC8Y9#P}v-|rT3g4 z^%CmInq4D+P`q-%Tt#aajOjg43B)4XkiCxQUN-Zb+t;oN2l^~VR;%#W0(-&dK6~u# zL=#z8Kp7Z5Ls6g)C0_*m4%;8wOOw~$Vz|r-o%Xdats`3sm^|Pqq9DikYpJ!V$`L1y zNRfbkTZP2WYq1P_kzLIan4fJ`IVbrHGL5NJE{a#KcvM;W)_8iNl?BYe$xk0mxx*Vu9;eGvj$e5=W>)X5JXtUS! zBE>rkFq)9#z#^FcE|MRzTWP4S>L7;B^?x38__Gyb*mFE zylqS6GQLx6D4q{1$j=hP;$ZcfEW=2Wfxy<7ix&E09k-+E-JWt$ut4NJ{T#Eg^^|;? z9gidHIhR$|FT?KSuZbFI!##yhNCMXKFGfCt6oU>pBJQ?w1W`PD<_%SO&dPoO8mEwd zB?i_H6AFboKPDb{SLs+4!}SHhyd|kSxF{?-qW0Qy=ecZS6KYgKL2bE(`7?y!8ylPn z0=3U)2{74<=~2V*>4**i?bnVk6Ad8wa|G^rp)mLH+tXT)j52FP^jt?5HTNPjUC4Kj zggLE!Qf3)`_+CLow?y{YqB%XKPnYlEaKxz34!z1+x{UUn zCo*KxkvDPbH2xFcti6C6q_;9YKm{ENEf<3qupG<_QV!K`OR~D;SOB`ir*-&>5$TZc z9AUVQtiw-93r3rRZ4l5>cEyz}s+oa4 z@@buO)y=45|9Ms<4Ju~5BppGm)$kIMnwM9qQ+VVkCwR?pY&1z;p6kx|B#G_x+FqO= zz4Euk2B)#6#--<;Vv}XXz@>ZG(vyOBe)6zQ>$U`gCbAdKWoj8xi1(n8|MlT=DN4nJ%cbKLj9D(c8rqD*YaV=LFJT7?Pr!;X| zDs?0MqTPs-<_J9!s z#SZ09#h8P>-`2vgO?+%81s(An4!wZkaQaRWM$uEoFKd{z+-Vfdk7#1sh(2N@G?%X3 zi+LqF&gCac5kXKr@;r;eej4Z@N&}G#*F#UAxjyoj{4FLwBWfjnXnRt}6S@!`fHM62 z@|GB4&A-0L;g^g7BN?x8bXn!>m7|E|TZodzUyxjKWofA+`vGG^X-Ll?86U#7$uZS% zkTl6UCNxuIl{V)T3jLCc7Dh~Or@gE)Xn5`L&|EFUb3RWgEorNmVzx9_L59tH-#m|S zRPimk*QQp1Ig($c4*U&70`~FKXa3_zw(O#?m!%yqLl`~Joy&?EUltmA6D#a3v?mWW zRPz01yRrKqcVqBra*}d5Szo>}(k46DY}^<1Ea>xLmx1@ZjH3 zRr1Ezlu3zj`yH7}bIoj7Cx!+DSim;i*BOQNm%T*zdu-%(htTJGY7DllRQWhZ7=}+( zJW3p1XTA<5-v6|!xUB3tvSUX65b|e+sC=~Sh5JIlmiS7`8hPUNjYQ=dx*go-T$5C$ zQMGR{x)?tm=lganbf#F~m(O$}8QQbtP5jQMD?gU#TU+_jnDMhv12bEqA^)=Ex_rcr zlDp72m;SZQFqG^`AIP#H{5niz{w3M;fI~*~$|qA^?#XR|8tbD?^51X%rs%>WvT;%v zkxJXE#YEde*rMqw*YQP|;j752xzlUoQWw15Eb<{e9N}Z>yeytL%O-JJUZ52_f+LHa zjo6fbA&f^q3iMkyGG4=f&04;Y8cbvuZyZ)74WW_u8+iE+jgYy&n`w)%s(cM zXImD-%f5U=aeds)y6R#ni-0DHznM+=zL?Vh4?U(Cwj!R3-@yQj$ib&oUAX=>X z2k<_46MU~1QaLI;W3~Q(T=sgVge2MoyJCA+98<`RpyV2mr^b{N1`a8NQLemIwA)ii zv>Y+l+p=&^9(Y2peDLkhJ2J0q4TG*A*mPLXrwc1EuBFv$Zs}k3$zh;Sf6MHY2Q?wp(drn7P}$v|7D&XnzH+AD23|S>|s*!{bFRe4R05Z`YDj77i+&+g|06z)&HQ(C<(-1AMb94Es^E*zvt+QQEf)p}G0c zdisL>j@6c47sS$rflyIZy=N3YtjEewq6`hnIG+|@pbzw??=&;M4!2Hx`p!UpH4YKK zb^=QP{@EmnGPs7i>4I`cxCOWa50J8=vZA~qTwX=#s?s@x>Uo6nc{xQzgrZ`jy)N(n z3Gnf|>E&_%{}1Tq*m(~Gh%hTy`FWs%T>{)e!NI{WFJJFKHy3|*m|uWr-ioFu-~=)@ LFxRivy%GIidu1Zg diff --git a/dashboard/origin-mlx/src/images/checkmark.png b/dashboard/origin-mlx/src/images/checkmark.png deleted file mode 100644 index 39e64d35003c754e3e950c9d2a5a64a51c811107..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3018 zcmeH}eK?f)8pofRniZ1ms<`BoPHnZaGLe+L^rqNQ>t!P`US}|B(8wyxj4Un1k?rkB z$VsF^LQ70V>1kE$FfWNwjTvUl^PKy!yXRc{$Jy&Tf1Q7h>+w9#?{k0e?|t9D z-?+vP`#tv<=q=Sl5X8XEb(a@{5aE@G%$oy`*0L|2!ecINyT^6}smax!2_eCHMVPCX z2Z9`5gCOj51W^NGOA#c2j3DoV5ybu?f*8kMZv4gpK?pbYyZg9+fI5CEQp|}Gr$tFP zQ4%(O7qcTJ>}bg>d6P*W&cLIf!3FpgDP_luf^t?Y;n2nDzSxa_MWdt~Dt0MyC_Pfb ziH2(=Jw}=a?;xOyXKkgkKGNUPhw&Gx_}3*(hS#M@*pav_4IKXM4DV7r1mv(JBN|eq zV2I1u7#o@l7O|Pq?8uQcJOmEEPlq1pkd9Bsi5tp6Fl^R24Lo5Yyr}HgT9A(K2~3JR z%wE5>2el%lY2mW(e-X?&Kvysz-T>(FD!2yH+0kN7^z0P4SUTGz>?)91j&CwP0)*Jn z@7SQkcL|>etZ)q!ik{sZIHtVgx~=dy&Ghp0Mhy4FpS^zL+Bv4%!bP!W`#7<- zjUTotZ@Baef7Ydn%Ne2M10Cu+WWl^*@Rr3)=8s!a0itrT}%A zZXPZ=!#bvhCVwuUPk4wR^Y*&!+V1lme@r0ZEq5V23EAec|KaDPAJTNQK3}+6FS7cx z$Gzlo-BVe5S8Bb@n}uM_H4)i_!I=Ig4KNhLos)Vw|D6aUS@ zM8R|;Ungu~`@Z>2O{0@_xlf3~SXK1}JE6BGwqsnF-zpR`DPuz$YEK9q-b>JiS57Nx z`6`q;*h0^P{~A)Ufp=y0UtQsR+wnej~*%tA7TiC}PLDz4#Y3&hzEvDTnk-6R^xTg>{{K z{fEXe^5vT;!C6a_05QiFdB5z{FpyDeHTbNm>vZ2TB*)12E0rbY)JIygj6|N3?KStG zu-1ty{PwcHL}@csubu27+>b+cN?oUi$s#!xOB*}s-PWdYc9=r>YpL%z9;CpHQJ;y=|@Qe6Cb< zma#TzYh^_qSd5z1?OcHN{U7~zJK=Pdwef$qgOqVjZtDA?T-IB`Po?{kKYG*XX4Hj6 zPFw1*Y5ls+Ab!4`L!A1KVe-2PT69rls+#gq+RaNI9xA$(QhrIs9h#CH(>~v6*W=WC zSt0r`O;b+2v`Vf~c8N=|94p5rNyC-Y+sZfMtFSWblhAXMuPHx>ORyXXw^6RTeUzY< zZ%)Msl;mN0U9R617S{J+m}fX6o@^$JW2;5IgOxnxXZNrRf7;sc_r$7EgILV!lYmNT zDYJW^}LYriKdk>f_M^YXa6IvH#YH@p7{YNTy}lp`%RYMyiwgoz2fDN$)B z2t@;lYiCwE;^E~jb|ZE&IfPXowchzgFZ!UOd`$W`(X}dE*=|^-wRXg(NL}w>Gu9xZ z!Km`gMXbUgbnyggHdtfk5xC75YO;#Wa#6`(ju26?=H#Q6#kqL?(^h&Q8#T4JNg{Y) z=7U;M?>ggRY@Wp-Hd=b~2tl2D_YO(w%)en&jLo$;$VT&TQVHsPch3UsTL;kS+iFDH z@KQ@uh`c2FFIe_lPXs_@NpC1YUG-?+8mqyI3Ty=aTAcs-%smx8V(0w6BdG0YxLYyFxR{l1 z6u?H$9E=1=&jVOZ0{3nz1z#Q{carcq3xmW8EdU!Q?3Xcv0AP=VXU;~R6naW0J|=)Oj&RAX@*ht9BUH6H^-Of6`9Vc%uAck zN_{$7B(Y*?`$brsvI4T!Pef|*51a(f=sq2lgA_Oo%>zFVMcfqHR(Sm6m3S#A;AQ%;LV^i o6GP%7ki^8q^-)LYN5ev5Bi1wGX$9jBOYwf)Ts(K(-VvPkPv8k+6#xJL diff --git a/dashboard/origin-mlx/src/images/close.png b/dashboard/origin-mlx/src/images/close.png deleted file mode 100644 index 58a547bce4a16fa315cec5a3ca66a0cf987db4f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16799 zcmZ{Mc{mha^!J@%!pOdr>=fB6WoIy=WGnkFiWW;WMYcgQC`(x?S)!0#WXm#zNZBg1 zh_TC9$G*RJe1GrndEP(X9zA33dd|7$o_p^(pCih|NRJ84iv|ENozur&1ON$tMFRQ* z@MGEU$0q!sb<;A`0-!98aoZUMzYDqOUo-^Z-Z231_W__b!A}8zlLuhh2>_L+0PuLf zs5MoC6$dUG=waa}{I{X=J_LR+cIo%{f|hJVm<;3>29Ah)TJAvKfrQ|?L*pl z9{`wZ=dfC4e!pk``Uei+(li(Pw^UCl-&6FsmU@BZCF-UAZ!wSW6`7`eG%T31yaH0b zkN`Qfn*2^Sy5N23R2QQzmX_s}A1R_X%QW-aZ=;LR2jYDaT~A&+pE}ra;?&UEJPWVQ z?}_whYioY$f^k7NQ(dn*44qis*$i%Ir6;s4UDa48js2uO{-iKbSmadZQ{m{7^zE4v z;o*l(5)l&Wl=wGDC6L+uuPf*rAGj13sCmHYTY{z_ZM+6$G6-J_gyPk^)CJ~z9qGU_ z_{pTJNc-31c0uNmu)l57o{!w`ZkFDew<({%uLPXM>Tr+&_GMo;Yntl2JS1=0JVEyU zbRcF@%C&*!tEGQ%X=`D2>_wZhh?;nC;RJ5+dvq*+8M@Qg zcgLDe6piEtSv}X?3CYH?%B^f>Qe)Bt+0e@jcptL+aAq350{L4qzEAqqYrAX~#r_|! zTK5L9!yk|sg@^t!EXi)CFV2Eqbm0LLI;Sw4?7h$m!16w91?ds1)H6}}TFRzKht2;m zBj`Di&k<#H{^TT<^M={Lbx=@qf8O#pgMK;aC?;uDmwhrb>~JQVVIAPeFVE}^)8)8r zipoWZu4F0k5Dfsf$k)`t6>J-#Sctt3+)YNsO< zS@i3X25f`n3r(F|PK=pM-f0hRoBnfrFDb=h9VsHo37gk#q$*}itNdEx+Pnw$XfuDR zaQI(55cUYUty19Q=+@iLO~}JZWCc1SGKtndyG$pE6`Rop}9?5z8NwWNbkVX)}nOJDI{z=%x~nDmogUpB`*`}}!mQ;<(R(;_A4Rx!6yIBqreH{4vgN|wjcKt=}M zL^b~i{%n`uT>zxZJ9QHE;-X1+`XBvmk5fH%LmI%n_+@j+4p$7k8Sw06H7x1}BPmy8 z^RKJ*6Qwd>qSbNT*}(Jg}@45ey#*Tv&VL zE@qY)a=W+Ygn2zBZd(o6&a)eSLAmPHyLawhLk(4!@lnuO*{L&T8{LZX;n@5;FGile zS2$`?S_(`$n~xm%Qh^<0A%&ZKg^f5l(KDW7hzla~MCzZn!J)(&8%|3g@eU3nvV$Ky8tZHCV?BF@ zEI(!}4HT|Zc{?4`g<19hSx^Al(o7%X`1|XN>#wdn>2q##gp)N-R2Djt@&eKEcSFN7 z+6?Rn+ZTT9n7yr?V}PTuz)=b*hN%<6&+E@}&ZA6jrbQACBpp~5XH&f6@rN>QY#k}= z1V`C&T87wrpdXvXtt8?Xe%xpAPs~q)7=Bhlzc=vd92)ov$T6O z8DGR5E4U$8X{3F}3TR6X{-%B33)%1CkZFBpB>;?-)nD1*ae_$!bzqr0XIk`8XE?zo^5wP@fFg-1&lZCI7^;wm*aFV4Kg0U5m*dcUzGp-|^HV zDN&+TG=5PyZV~jO$l>agyVABh@i-FMW!t^ob5D^Mt zoVlCbSRv?8{=l1Mw%xdK4quzO46dG^cM)|TR2bQMK1+$4ANGm}ZJK78ik*E~ z#;4(dQ`FS``Bt8v*+!1xlGx)N2D}O+5$jT+%z=}g&9~dAz_F^Z86%f7qbEM~pHtXk zRoaef8%owYH8-(7k;7OR-W^qqBpqd9>RC^G+$FIf=%g%~MKa+E3@SeI{y`*dT{wy; z$}Pt3d&+3jQ^La5O<1IzE@Hqj5hputjvOQ+Nr-V6*xLYg=&PUQGp+Slgcjzm86=JWYmy_`}{bVETQ!Y8L!7! zrEtOE#%H-qzh_k9GOiJn>%9gV3WG~<@tKzqZBMAj|9jpV9?U-RniqR5i1k9|ssxzj0rugt8U|W(|6NBthb7utg|r^t)QWKqvSCN zHT=5@n$7g-8&d0=p!$^T1`U_A7B4Gs_Qu~@{g!Kse}I1^j#ESg2?l!08rNo}5!p>h zd0wb{ls8AKVn#grObLXkL;0F%;aOGt%ALKAVkFYbT=S6m-CypN7H#JaIVKp1#Rudh zUuZ}a6j3-S4Ma`S^qXtDLlog!CsZ+vrT^l!|B{3sUeo|h)>X1^b-vy8Ugu!*&(N0p zE&MMd^JVDTmBR-Zi6(tTF^L&x=I;QnvRG{_R&@1K^qbe3R~ZiRG7_E4UT;_U53!Rn zil8`pB;GXCT)zJK?#p&%Mf!#l;@Ohpw$B?xiCk2Y-5+wMSXSJuW5`zxRcc2O|!c>_wph~@c z+R~M=wRG%(}|NI5hWn6eVFEZBVEfEszxQ$ zSkBBUd&l7D8DB~Pu8t#`qR~~>lR_dQajf;y>F%5NaSy}1Dsg!2Xhko-Y~)?h`z?_K z!h=^}kUb}W_I?gX^zyVj7OMuFvZ$0&UJ2;ESo&RHajY<$Q(FQ}48vabJp1j)hf}*z z1b6r2QB%=l-)fo3LL1!cuNNYin2sJ64`PAVkKpb%{yZr|_V*pHGF*HhV<4jK!ttGB zoKl6pkV>x~0)v`6DBzx$H~$)+|@b& zUJ<1EJ9astUBoIFA-{gUzHFqRfGsK?vmv1|Da#>j(Y<}j1cJmN+ItQyKfZO@PPXmb zLFwyW9=#zvR}x-nkHxwgnR}b&U+*m`3?Do1bYOfSd4-WrNya468ZJf_=J)Gg`sUYL zqVJG}YFG*TQ+^Fy5`_juq&@o?`{x4_qv15B;EvGFklLIv7K%mP8kZi4O1if%(hVHVWbx$#{bKMH5$Kg9J7cBT0Fvm)628=n@X$I28ETl z9eGCP^VRZHM4}CqbQ9IW{N6XuYg^%T$$J)nmpALz&DAqh6-=mS5TRtlJTHRUn-zYKBq=4XRN#YVJ^RmxkE5dAFw|QT-8~xiO z;0VKho2-~XgYTDdI4Qpl>R1MGn67gc{p!yAuJVKS2oo;c3im#bdx?@`e@s?pVk_Mk zF?Fy1sZ(!G&?>k;bTIAtcDn{g_~7^U+5QFGY8T;@L){How|+i)=zF%cJ?VW>IA2$) z6wviirz(5f-c_Lq2RHr^SG6jnJoVX9Ojh_%Fn%A7ciYbN$I%-W9u>?!(q2rzaAc8U z^1w`u9TsZzBxb=7+VwJK%109cc1_$M9rX>P1r3Y=+RXBW%KUjUUn}LSFdn|^o+Y=P zk!Yu?I@|aM0oNBT4$8var=)<5*j~#pR4v3AdzU%4BAtT^&1m9_+sFXRBVI)x>FIW=rFhr?mDhXcL5$2PIR0U!QyMj6X~~GMM#vYvzvYkj z*}gTzD<^vaHnxNWvtug5%f;>OI^1%el}M8TTOTHPhOk9g`78LYH(AJezD3ICj_+EV zK2m>4V=(K_JjS$v!;E!7XREz=fwYhcD@h z#L-Ap{&W(72JWA(8TVbYzGI9VSrLwi_%=5pRV)gbw1;lFI&Y1iRZTj=@=pZJtp6Z zt7B9PEHt0Y^GLR#F$%N0N2oeOc)-EYzhNcpATclXe{ER?(!_?q1eu}K4CZ|@3d+gJ zIh7&zc#R8xTOojHzt`D(vDxJii6Obi{g5`O7TjO%fG11!!jNn&VPdd&vh~k9oizcJ z6<&XPM7PK!&Hm2e5>eA}r1LhuFHlVpmeRk; zPfyB!6Cj;p{CtTEPrndM-I{FU(Zqxoj_gmrYpE}Npc79?Jo^}Z;rPH7yghLG(cSyT zJ`Wuk83p2B|DiFaZ+s6^waK*8P*&z!)i{O0*9Oq~m^%-#K;pewTN)=QkBKj!s0>C8 z5HCC^#ZX^SFOY5>f4=#77N^U(p@kRY~bE6{;5vaLdD3B z`rY;_{>B>|F>+H!wk|!?(KYyf)TI8;W>DsW%|#V9$EQ`SU&IYNKQF0&?~mELpb@^c z`e=*RmXdj`N1`~LqjkLes;J0lBmHzKdE}4%@jw?n^v<-6mq5fr6(7^<*0XZ0o9nmI zXeElb?vNGnAJ2ihtwiPZ*_f`*Ukh}2RLjxz-D_^70!AL^ERM3l3+*p`#f^2Fo+bJ9 zANTb+xs7lN8zoKG+}hs#nnHT`jiE19Us$xb!No34kW4fB=+PA$>EocK&kGsx1uGtw zYHa@y3M9F|-@mSkZr*R?#O>uc|Ab-@?@2`k1Fr2l^KU?-qRG38^n z;Njdlm+|($F8&KoEx~}uqzq{x7n#ZzMJjG_n+RH`A^to1dVTz`L232cXgumQJxCE(nyB}_Hmjusv{T%GS zv14JfP*ZmE)#a^dF4ePJ#1l*l!L31~R)Pi!+&qRE*Umt(T1Y>@#dM7f1Hn>(U83(A zPxU|D7`Bd{&kwLV-X{}g$gRu7GBtgyT;VFI0zK3HdUt zNqWJ+vDk?e2+mya2~~_8zm+WuxQ-}xf`yZ0rksWK?ic76>@n7@0DOJ;Y2k^ko6k{V z_<_}JM*puNN`k3JT7R@vdsUxT5JNbepx&qBR;eTK_9_a|Rk0r9je@fdYJ3m&nzOQF zSP+n#-4MLtBNp~WEjbE#d?LrCgnu^ttUaK$+s*x0^Xew|F}=FGIs(PCevv$D+i|#G zg}>CCqbZ#cv77S5ykI%EcV{jj7mWLkoFBe*>(>P`efUUJ=xUw!$06^DPtm29zj2Ze zae5=`?ydF}ap)~QHRZxvIsPMqL@O_eh^7knip>7)I1~%r&&BDtd!Oq9rxnQboPn=< zZg$-`yM#C80;aNimxc>pDE;Cw$W`Mr@pEuo)pU@t1bLvD|8Fl4-Ce^u>*z4xP2VwQ zEh_njg{0v*J+mQhR+P{mHziP+O#@{%GHhXm~RXq5^ zwY7E6-fn7eW+W!4GWJ?~u|{-N4mS0%`GiR!vUy&qhXB89FN5eFRsE%ZcBr2Ksk$K$j_9^h$) zv;R!#AeC&b*|cWHo8F34XK`vnvU=T=rZKrzFU;w1cQ%;&AD&-z{5&x#tag$GX#V1= z8*--5Sf3imrD3i|nn=qXS#={&-1TY&HOaw!DrY+vv+u`In)Ehf%^Pd0uejyn4x)3j zvcA4Nt+PY)Zc6*I=Q{Vvj6HIo5clxK=rEonyTwxd`Uc&dS6f9cCi*o^cFany2osVW znMr8+!rJJUv~%P`{%jLX2rY+II{fOcMxcjYBpmcqi@#1#KsVBR?B@q|@-`ND8(6wI zb-iL9J&);L+dh@Q-k+O6Ki1B*(f-ZPWi&H@C!8B^wKqHt))&pk7-aDwe;b&L4@|u! zx>Lis1b|W*px%z6NjB@H5S#Ai1h?O37x~lNtJ$J_8Ja&2c?eMypkV}?m z#~JtXSgmF4{A^pqQ|LlRz#ZGL7!NW|?u(JZC)IaW!@|2f#efjdHwLLdjHG+= zKg@&UAE1t5hb16|LF(=~%OapWK8UyS&D{l=DhUKF`F@o{2|V}9XyM&8 z;w%cjqlpQ~_=i_UVW{*Cp-$w&QG8Q|gjv=&hj=F{mJ@Gv=F8|Fww1wvVSO`(8?I4A z)Tk_g6)tj&LRr}#O^~wBHGH>?$4ucw;y&0oZh)zVu}(r}3O*B3sG{6ES-d%l20iqp zwCjwKnmw$|%C$(6#5@9{z?Td{;C-LB^Mn+@Hy4evZXgWsRdA9=ZEB<`VGw*!zK6by z){g^rYm<=Y0DO69{J*|X!uI{6L|gd4IBSGI3F0qtM7;@mJa~hj&=xnr#pUw%pPRFT zX&ElD8xp`Cma!O-VPo=SH3E_F4G=DUIrqTCN<_m)q6 z7yH;!^H=>7xE1)iVCg}G_xMcBQ_d(Wz0UEk0y_$!{`ZL0m=b(ulvdd=KV}&GqT~Yps#JC=N*c1W`K*G^~cM~C% z*r$QPc$X zRfByslR?(DNs5{hO$vw2dmezbYmQ3=*73r*b-s{NxvmymI5od=TGqZC#C z2Vn^apB^?1F;lK)gsp3Ds^ z18nw(;dym9Z1$5!hJ&-W`}^kT;wzbT#_0HV2U}p@%R%-@Ns%u^Lw>oWJ!m5}VXUj<`?y$%PjU5zg{v+CxD4hlf8xvk)JP^`pnr5A*Hog!V^V zY%ys5o*;&IN@u_-Xgdq+mm}q#{BBT3@f`;pr%zv#P${~^W<9*184bnV{n+aL8Ai1b zK?vm$IFM;FvY-jAqN)7xScjFhKm;pSI=%kOreRGb$S{eGuYP)d14*J>#Gnr|?+rus zL47@;x}|3ci146cVctuCYJp}}p77r5@dZEp2UHI2>k?J5+WR4kQpSK2-QuUI+W?*EKp4~D#(Z?%@DXvwp&aO*8!#2KPt7kq7+%? zy=_P#g{8mu10z01RE-uBO8igFc3EXQ>ztDIP^e7mgO2sKb)*n|uvv5`XQ%KFfg0&IdqekpP6h`Kd0Jt)Pui}Rp@uDA>K-*oYKH*34 zZ2?&0x~?t;6b1{up6rhfL^iHbd&d;~4&3fHk^s5Y2}R&uVH5i!+Q`PcP^|u+hJSo$ zXyo5(;Xq@24Gnpb#mM-{Tk8RWaIdRJh?zKMDDRRx&xQPMIZGyDb%ysHNsTnjn;kYU~ueubgAVU$6YEBH#0w9#2MUY&X_si<&frU;;t}2Ww|dXY|)> z^*+Zu>p3)M6Ufb7MjPKss1}t2Z=Rp_04jw#9Q^Yf<4cR3fQ72L)xy1={Gwi!Ybzro zAr%Mi9Hl-8Go&>*7PBssC9pK<*Gg=jsQglV@j>7v@fi6Bw)Nhhua_1=mB;%|P>$sV z?6xv)o+rMrV)N9TJ(#G{xt{URefxlYkKnT6k70i>CM+kLhVN?Sv1x5fEt#95Uryg! zq)zs@RgmE(gHrZwq=u%~OWZ*b5Z*-*mdvN90SYZ0k!i_T_Z(&|FRWok^J%6avmg24 zrG;K!k`$-wBDj zO_#0Bs)MT?T8xJ#GS#mZ z9^~70+MF$@TSYzMj}&yu#6%kux{TTVgbyj6u_XN33-*Bmi?%@$)AdWsRio zb%)imFSK9#ULWFTU?}@T%&1C(YKcG0!b~*27D#x!Z(NC%v_;O&6R3F-b!%W+(H0(yMCq5Wc|Xzh5$#(j<2XhB+apn z?X_otWY=#A+EU%o(F=K$n<~YabX~N@I$HF z9?PK)dy8O?dV5aUj!0%W=?T~%SfsvdGA*oMI>#3=(ui;fJs6qEaKYF$%48oAIs!nnz~p0?6w>L-C8n)&6y@1j4j zR5c!%gxBbA5nO|hO|9Vta^F#dvjYS@Ts96B>|BrIlqKKMB>##*)J)DZIXE(`{~h$? zTlmK%GbV@J*>DdIHbV*7e}e(>U6oTYfwMj7P3z>{`o0rJMD-A_Map?%)!jQbdYRrz zFJg_h8++88%uu9XM_1@V6aG5kB`iJlkE*Xc`!TSzc1*6AcKd3V=l0HmF!XCMHwMgg z){818ciD_P1IfIiNS2XKd(|QrK%(37OH0wfOhE^p3b(E#Yfq2N9*v6xIFY+109N;K zrg?!H8wb;8-l=akUkM3WXdlLRRcJn9W)XOti8-$)8nhO>ss;Tve^PqqBSkw`ZeTO$U-+zb3?puHn?xoBXgnJYwPW1eRfc{6*B@5^HO*Tp9)v-m3rWH~;;Q-ycWGSA{WOOFmJEC%Euw z@7~#iGge-wBQA}G?)Z(47Wu1-J2{>SmrB3Kr-*x9sF?EU_^+YJ7(uU=jJ4U0KQ~;> z7n3^0iUT2WiYZP*uD*3uD=9kx zi}`wc4~FJvE1^>}LH*f5*$~Q!z%w=KlLdOl%d4bs9&sa|jJ)iN&kqYl3&w4fxdb`w zgY%A}GJkF|WqPXye8k$RE5^dxrC>mIi*L%2;Me6eYm1ddp=YGHn<6L8NZ$_UX8t(5 z<#oZWR&Z$U{P3#V`|2@ci+e6c^8;ls0R6*k2(4A?@r#3ifgNU61TpLJ#kw~)k2z=t z9pL6pc{p|A{mEbpbqQ1jgL#BR)TLKgg5P(H!yJEz@V@6qQ-0&Rx_RkJhjY18oIFk0alW`a`4I6Y-`qt7!FtFIVfF2|O+}Sgh&bmJ=xK)$1$X+|TrT5hs?Ux0 zR0sW-pY0=4@&-J1G^nwHsJubt^kJ5VOM{GISS8FTPC&lx-1yvM&PvOi&}u=rejRO2)6R(d1J`}YUt))FQig@ zS3fm4!;4te6IJ)GfA8tQhcfKh%&J8{2(I$u9rJkz{vlHlKiUWBiHD#M`!1dioLVL~^+U#5qb|?@+0e~GK6U_nS^TVrhw#k@?du3r< zcvswC4iIdT*DneKfm|&`_DND1vOm6X6+%%;%}s)_*_;DVt2BBu9+5)O8(}CJkY-+x zVY(1a9SM4&()hnvc*u?2;I4ppc!ez#2ttL}L#n){d-FJN&kM>+?BCn+>r{mxO#pN2 zlHL`Mx7~8K>s$a7KWQ++?{JqGVzFcVZ+U)wOxp;Neu6B`p00DV?>!>pkP0KGQrP82 zRg2;QkHz1|ARBMXq7)@do2FNw8a;e%r?`qM;8BzU)Q3{0Pg*Y-2KB5j_Uyr%I$!0z zpmHc+U$%NwbnAZfnCp3dWlp;Oa|doO8}R(b^>5Rp(d5HW@aPUUyYP26%99T_ZyEw> zAXe~y1JnztvD4-yRm{${NO>XAPQ4E-XvjP13sxk-*eVjJT?BW`dNq(AWcE=8lo_&z zfn|lweg(kXTRFvg+jjDh>N{q*6CI9Co&B^SM?OTOb_qPj;r@<{`1UD(>g3411Ysq2 zgMLrvXo`S2I{1wx82jk`zi_I)QHr=PC5i6w75#1Wn> zy27hTFD_=}$v)wqbeBi}gPDIimu*dVC^6rxLg6&{UzxzCG<5+ZYD<4W~8Z*R$ zxcT3R*h`c*XNJ;pC;qA;n4OIbzFV{P(&8^tVOgBlBY$*Q?E2H%_7AG2V0nwqeD7A);gm-|{QOX{%!Sp}l4Y)O^?kf=~p+=@1c+^=`zztdbJf3QiA z{v1@?ACy`dq}>4`6=;b~AI%r_x=~{Dtd#kp#LMFV#1}fO_|hZqo}z;qD##Wn`L1v^ zrB4}M+tG(W8<|VmJf8y#cc@!s3=#H6HQxdzJe++QaUHItP}b{9t95jkaOy5Qxt4pa zj@2tG0Y&9j^d69|b)83C&y$!) zDBOxMXrJZZn)%bO!P|XInAcmAAU(a6c1>Fjf-q$a6&bxFsKVf7sj11nKE5UNvFUxQGvd%e1HhKh z$ly6|Ww9koSkNIEg-wEkXR()zD;teN1+DcU(#({-=DmyKe1Ot6T`L!U_wMEhEgYcAK;e~RN6*irRKFBi$e|S}uN_nQ z*LI*hWK#utNZ9;)OU~!cSZ`6^ONHUsSmcj1zGRDy5s0vGmS#;jXl@)3Wp z)ZR^gF?}mQ5rW$>Hh-5pteUE188`0Qt%a?Q7wmcRi@C#USBEd*0RtYk9w#$=7t}NR8~kDitpGX?z7`S)+pI(^ zb!7#7O;CF;@@-b6Ae#Kc|6J) z{h7}XZrkK5Z!^ZBh{RPcsXNfDES=;E?0{lS;NR)2c>G!J4>V<0(!?J6(G#ue{F}JY zf&7>8XFaVQzNeopjW?gq^LkCKQ)hk-*~$@DNWusa3J;Hng8h2@D&LxM0N;S^M&6s_@8 zaEyv(Rmsvb(|A_+W+xwJY$$UBLCK+Q(%})TCmoEeGO|Ua-DIUp5l`v$EH~25Zqfl7 zi8c)rg8asnCEOpx!Ls$FaF)q=#)X<#@jsp83v1%VVBM~+<{zK=0CUf4xMmUxl}g0{ z)?1X`kSb7yk zns`7hM7o`7uE~Pt$AT=Bc*G7tA0KNOE-;rf7Mq<1ZDCvL+bQ*J8(? zyW(b9in2|17g#azQSN#j`G4T6_pszTFTM~bCPGo*=@t~4l^$MT(I^J@^*1IyT^VUJ z1lQq_kT6+6D3~{pE&1che;*x=61r)Y7A<3FslA8-r>GOu*dsS?zr8+wSNNl`023QG zKHjGKwX;n~7Cb97q|=mgSsdb{=w-0^5!Lx zYm?X60uMlG5RG%)QjQlfbiY&2Y-h@pC&|0gN!tI@UV&-ous>*+3( zfMYOs3Z0-MS#2)jL$kJit&o}`x1Y!QN;8ib2`*H@>^CPmGjChdW0cpkQWi6%%sRWD zkQn81Z-b_a3zf@~TsuN|G-N&WrG7q%Tz_rj&Rvh$V6qbDL1~ca3nAq<={DuU+FC(j z1vP6=lI6p##*?iwwdFNA$2|BW!y-_4N`99A=$Fu$UVPmFyh~bS8=W0!Wb2U=FPPrF z&i^1R28BmocDTHA&05KlKvE~QvT~$-)xgYOY_WtVc${_QOPKSO8D_Je_i0ndUA$yU z&B@XkL)g+%W^Y$4>ro$8g-s@Yr6B$prQ?W&0j(uw@#?}!ZFGtbn6uFHI!8?|W7Zjl zX_OP~&!6X9APmb$-aE`$P_)E49s@c|HV~VC1!1aTZPAiRbs31yrDD0w$~)g<7q~$= zT-I@-5oVsVrRekX+D4eT$4f+F1}i-6Uj_Em-7~E}7_W$Y>dqhK&Up_pK-a4}kvS#c z@KJ9+ZSyWQ`?vpJBi3vXO}YZ3;Liv~A~aewoSJjzzI6FF2~bqH0VQc4(oDkPmsIi` zK=Hx&A_u?{-R||RY$nYQ59old>J_cN-Ru1QTb68sb%46AU_rsdIWq-qPY=^Ic!S6b|+FrFO~htXE$i+w*7UMoFliLEyH zkyMT?rR^>U{%q?*zpZ9MNo;wQ(JFD(v6UYmsVC;Y`E`Z=p#=SU9J^_HN632Uzh}EY z*_G!0F~2}fUl!&|W9i+%HzPQ$-4wpDWb$K<(0XM3oQtm1TCif<6!^8D--XE%azO~a zeKq|R0&k2gUPPEkdkZa@pAhuh-Mb1TXiTp2;}Y+I+cZC!G7U4ks^iZPDzpYF3AKOV zYkTfK!G`WAT8bNp2oe;}Bwt3h$K$RNdrvA!gl8ROzKXeW!0d~eJQMMUC`%NB{J*vg z11=lNfZ!E&{Lh3EmhG7a(LGJ3DJ{UNFPDB~#Dqlh9SWFp(=Fo(`zu@e$Mm*NH&f4F z@192zwYLuag|QU@^4defgVjAm7~Y#GhMn($ewU-Sb**l@I^Vvc;^K1!et?tmC*@`2 zm1N}4n4LJSa{7eI2}LP+c@=qiEzX+f|4#=GFV|~V{r~?RrOv7G!baent`W9a+bQh-07x9S>Hq)$ diff --git a/dashboard/origin-mlx/src/images/error.png b/dashboard/origin-mlx/src/images/error.png deleted file mode 100644 index 881634159fbf95dba09c720db53c57e9a3e9d73c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21116 zcmcG$c|29?`v$z&rp%Oi+NczTs0`a|hf*X&nIg5#vu&OgGS?}Tc^-;n&OAoREZL?l zLfGbce4nLrzQ6aM_s_S_=X{)#wVt)s^W4vUU-xxg&k4J$p-Mx^P6;jv@pVM^hb`l7jz6K32PT2ZB7$Ly&(k1i_d1&q0u@CX9%Kgf&U?TEkw%!{*v6~=A9el z)8rgyXe7)?MRXuYOXVh7QO6xe7{kOH{!Uoh-+xe$|2bbs@XH$oM#@wYB{d475B{0A zKInffHfUmd+!;^AG5Y9q1bSt$q(8yhMpII*qyob;5-Qq=X`7NtPWVPaH+99!#ymz^ zzpafyxk6!nGntNH0R_ zi1IlPcV6FLQ#{#P9j3pV@lFZzT(G9eqn#XQB!vF z)7JIVy*&;PGG8lccu~iF92mlj70ty4#Es?d9T^l59>rXH3d(*vd;1s!FL zGvSdwZHp9-woZLy)m@dnbZir`YxZ;fC?bb4)Jm1}}p?H`ZTl&|Ft6k%IkPTu(WSfKQA z=-i?tM6a8cF>Ir(++NK@R)Gk$-lo1sN6kIwMJNkm@mqf(ErixhFVK0BR3|*Eh9#_p+cOXTbZB?Pam99{JP4;NVtyDR5-Y9E{<9xdFoZuO3!z=s2#x5Qx zn>F6vmC1R(4E&la8lt~=g+MUgj^&SLjel2api^$Ll5+mCzI#b&1v&0AdNULO#Rksa z%2NAOF&j-}GicZQr0&PIRrmGra|${hoKUFXd+>q@ESvH)|fmV##9{z`Q=d*67zXi8oddq00=cT5gie;BIQld7x3j?N4M#70i3X%!+#@ z8jner4#@c^O^yyQS@)FSUxF{XB+W%aP9v&aoiW3DTXuLKr%0gYi(5Sd#h&AO)5c2@$&ix&RH0P#`Xc6L^4ks)3>2vIs4bKJQ}6uO9q6wDRf(pMjg z#%GL8`m6Kt?#5$DV#9Zqf^$2gemgyu)l6nV=8gRd9m4PS3xHKUMWE-4TcLoo5V3$xIh5Am8DIf#)l1K1P$4{(BIkOhL5=W6 zdR0h-v&#IJUi}^wSkH%T;1!jpx0CkHRIV3gn$8R?xLK*v4@z?rA=v|?ynSC#97#aJ zdIk@2B6&LB9c<G{ z++Vc}KnKCo5cCLIZIPi|I?%m|B)^l_@+>ZtEC2!ZB3+m%tDy(EV~X)ZgZ(9{sK8w2 z)iJ7G$o2KDEBzzu2jQMe%KBky*kd+`UR69d-B z>J<3fO>MU{Q4#-LVM$3nA;c>49ck|!OL%q~c+AmoNHWtf#%lS0ZV&>Q_S8 zwB&1cIrm=UxLkaR4aXi_uo+lF=94D=6DEvr4cJh&&NG3+9oX#_L$Eb z0`HK|2A*crkX!s%o@D93x}%kbcbOl@fF6tjAJmn>pTcuKFauJtsOa&pal)k5Inm8R3|%$c0)no!S~q~j?}GF2BmLjtdst~mVLkS-gnp!c#LBGjVdr|4o3 zPhhb3!5ZC>0;=_m9RGMtM+lvK4wsTnB$%Z+Lz!h>$Bvj<2!gTGv1U*bvUH z9TUeeA3EN18J9t`T-q5c;+W~Wv6x>_TC#X5P!--|sGwXNNDH2Eh5V{pkiO`&rcR^` zT>?U)Zni@F!-trdjD5AntfbY->JX_=vM>-ABZ(K7IRfx@1X=?|>mNuNk2Nn}`KzXU zjKhi8WLdrxskh&=OT|O;Pk|S$kYXaKAnMB;GYx7nQ?nhzcFAknPSA?{nF*pLed+=- z`km^a+_&%xXzQhkDw6OFEqy#!<^iBYbJy;yF<-#I%w=4{7VGGmnXrV%TuNv=4M-~E z=JccF$igvGWs6SMvjz`^cO1i%h|*4-E_JpIdyZZjibCcygXYqu(8i8_V_$|(F5FabhMGrwe*p5i&Db#m@r1s5h~4pWCDYzPxydubW5*vCVo>@wR1zZ`6QtI@Njrvyqq zTTUpqP*zXyMug*bjl-1dP=@J`EX0x5Ce$;45wSCc>cTa{?PnjGjFAGb@Q9)&zlsH+_H1^ z%h9X>1J7x2?@Xiduf8}{730{@4<(_yV`7s%W6*PJx1abdaW%V9$?5J_qm`$Q+GBC= z9zTO_PBiC~p+ZX?pw!PBQ*W+`Bi&Q5A(s=3s`1yZ)9$XToekX3z${0RAjv;FRY~EP z(ClDPBg()YUe@3;lnsT%9VPGIUqAWO?W{3{-gaISI|Z#wcEDQ(zHm&+xKmgH6d_sz zF;IEyOzJc*1l~4yxApYFV}B;2s!?_VZTc+$C0tueE4-3dX|3FTG8(uurN@~VZ*`A| zdR;fuGx<>K@q<;9`}+6qQF3$%FcP?H^heGqlcs?Q$8~>44y@_J{f&el*VTS@l$?h| z3xv4kQ$e=53FhDK;JwZ*)+=t{`(L&{Wk|l-ft#g^2?q{s@prD68X^x1IN}7+Sd3 zAYHqvk0Z;kpM~0(ZEgaj5INRAF`<||kU+~+}MaG0_5FeaS`^_As z@i9>cCtV5oSBh53n~N^5IIiooikjV2YU0J{MQ84{5&0)N%cP``A}~X)n#;pfVXdX& zzN&l-=2*gyu8$Qy3L~p#z29e5?;3$9>ROeNp>F69s7|U{v3rJX^SXLnf?v$%GxquA zWTa#!hzYQG?H6Ih!790Lvwhq89nRKo_FSMTx!wD&awnVQ#!pdZg-+itGwMR*kkj*v zue}-8L%}K+-w0<&k~cw3CGv@5(j9O9W;vJ7I>jaZ=}|yQw{rGgGkDM5!4WTr%()b0 z6LXgWEMcj*@P*o+`ZjzR8}tdZ95ra-ybon1g0`L`*LM;kz-Kkz zIqMPv;ztU^?^`#UvA5w7jjCW@-n1Pf6G<58nv)1?jlq4^MKyB=MY}LjdRmK~ehpG` zzQ>W}G7+Q&234ABj(z@Vbm#1W?lj(h4OM- zO>WnE%(%fJ%VpX(4K|CNzYF`9knEJSkWL9TQW4J;n9*%(A1_W0=BrGc>~gsSZ@OM( zwSThvct&<@lDu->(^Vdk!S_pMb{r%_7H;~yPEUJN*yD!lc~*P~)I!vqzmrs>7D26M zzXZm76?IKQ)pS}8q>o=h_mN^Bwo=SF?cN5r&`4Nd^!Y`%YfG(k4XcAJL_totvo^JA zKrQ+J?A|bR%=ly%$G3s5q!o6KGI5&(hkV`xM*>B9BS`YsW>pvTBA?^0gJJJwF&@P7 zmx+IE)5OG#R^CK4vp;qii5@Dn?E~*{0lb5AQ%+L~X-wbJ$3~tj#2u~+;9}t_J1(V+ zFBX`eeLsiX=Iy}10ie=e%X)0Pb&n{qw*FGB7v0(U@t0(bVaQrc1@`&(%cK3V-6B1O zNOlS^sCK3%HxWG;lUMAC;ID6QEHV21?gUqhc-K5QRw-b#NkambiS5h!t_-pO#8d~T zBoz8eojs8kB+!CyBR@wUbbc6&Le7hT@lM~)oAwIqwuH0iClZ1nqyA>u_xX}Kah=a?${?MU}=a!|J6 zD|KrhFZ_4{S;Dng>k{8p-x{n+>khvv-vgW8u8%4tZmvZp@=Db~b4pBUf&)SYm#f z($k{32fC2bJYWXOK2tp_p!ui;YT|7Jp|jJ|FUbz4JTP`XF0UWis>;>hLj}zlg7?%F z^CzK@qig7R*9L01|odgo|w7*5Z z+)_^`^0om7ejmqH-nk&{WF8In$S~M=`Te?rtu5^sur?M)K7@4#BDn-n5?}65$@|`uOCwrpd$y zFip!K@#TLFzkK;|1b!Q={>|67Rzm28x^ktBr3o9J6ns0ir(4rsDPJBG1|P4hq&VS2 zEa_1>z$3-jQMOPjo`2tr@G!V7vcK!&IV^6&M+Fr)M}U`UPWa3Wk;7JCUT1RcQel7z z86zcct=HcO9ei-U{1Hz=goQM8sbeS%${yv$0pHZi6&k~XtJeEoH`*&Vw8oHg9GF)wsx^dqW9o-W0?F+c8TiL*>n@3+J-0x{rqd^bhJuK4@~{ z8%FcSOv9)2$_=ItxK0OZCS71o@@}~{NJ|T4-ttEgMS!O_ZhDQ_I(vT)?zBAZ{SXy6 z&jCj6Px!9!3?GE!DwnMLoaE~I(dySe>P73fQvO_DM+hlf$4QKz4l~{!swkrVlJbsz zEy6-s1_!R@hrUqAf?eBIDyryEuoKf~R(9y9ExP~9YzP<~&nz1Jrb z-?wBwWlW&Xmj|(){`poGEAsw0Q z16xQ?aE?$*6LTKk#LUW8BUl18CaYrEKh9-MF_u2QmnM1p6oEEh1Pp8Tney2wV&?)F zt9*YqNym|$Gsf@pLT<~edFv39b3cqSzc{j$2D>>-8eux1QFeb3j&RpVL2U$(~d7@%V;ZTky9wwqTwRb9g|O~c#qK4|x-NXX%2blEU;j!Dk~(^Gx5Ga=|_ zdMk*d|3lI+=>IhDJA?WFF@u?(^iW$K%P~@%jj^;23Qm$)Ac0CgGlm`F7^a!Qu-D~< zUNe$8MT0O3v!R{5`KnZWj`Kh4pl`n9ae|~tt3Zgn{to7TM9g4d4`KJ4Px0s<$hZYK8GsW_cwlmo45vx@0&H z$2Cm`UVxdXa~43)$KG(WN7*$#fKNorMfU`s0<(n1f2#%W2`;;8{w2Ish~#HBJo6?6 z-&o?LRN-E)%DXt*=FbJ@-2+Q@G5E6NQ{2xoj^CWXxei7GHG3+UpU|$9A^^aUlID}q=wd@8t-RZ~E$BAfjwjeI%?r+q*8U6-3`9UQIOnW; zXp(KX2-_P!2YD06c2#XMTtvmYm6Aa16(QrEuJ5w;nIoSXJl`U3d`OP6q2tESbBv0f zL&D$%(l?T8WAtyMn%{)w1mT|&DDsUsA&a{(oEGCt831Xa$`o;+l~F2g5qfZ&ERTkx zRD6+P)Yp5{N?>Rlxi1Ozq$aM_U|A)r1QSv^kX7T8Nh(Pw)r(wZ}cfg1Z zQB2|Dlau~nCI5_h;jgU?6~-O$2S{f~Nv-NT1|ag(Z8yc+$g+84Yx>aKc#nmFi48Na+LiNdhJ#bU{-8 z_IFzrdNEG`qE0mWF${^TMsql4V9DX!KOiDfQF^vjts0ElVaPq1eG|uK{=i~U|12db zfjWFTxp1%`#9HsJEyzcQeH@8(T>rz-wq0`HLdVaQJrSzWxdrBY^8A_4MyNn51Ud9M zm8ZyPgrxmnAWaDa=~T+qUyhj-wxCF>IslRazj&EW2OyNWz`Z>Uc?vjhDnI_h7dzG3 zzj;3PJD*I)u(ljSgXDe$tsuZBF2ZKaD!(@m&)E*ldlt*JleiKn=& zUrf@u4#rEQMygEnO74xWJ|8Y&FsRW-1^v^)Z2WBQ_tN;*MZOdX0^xv7bGF5g(?!E* z_kfwA5EKlh>CW|Ed4*4CIU#QoR5K;Q*<)6GVmNI~aWEVKB@GtO%v|u_hf{)x$>dt! z#{o?+RiQt-ATSI9@Mu903oXmkK2GGJp<4-4DzC2YXp1TK< z%ywuELmfGpB`8)WiM3u46_kJ5Y0NWNB^nfia{;N#;y4B!AMkjT%lq%flmR7rU$Wc? z&(Rq;Hk~JMY;M~TsNZd2r`M@K;rN&HidY>kWJdz$U1KjO}cq)3x%r9@6|z$ zSw%ajp#t-%$f3QYLM2}EM`a*Fz^28dkZV3co*?LBmA5DWT)?K_=7cDqM<6^Kyg~2( z=I5XuzqEZa7_h26BEh2ODL_23+}ysP_*h`>x`I%G{0m>nE+a$@Kyf+sEM~Y`6BT5I z2CJ#o0*ZR$0NQ>TfaqLl(A3wA_Pq>lGy?bogk*5ry6}bhl%Du2YUPz)nTC(##%g^J zDG0QEpt|*(CUGNX%>W!(oEoxhco@SLdoJ(00Uj>crr$o|BPHbWxD@v!p@FKY)?cl} z&ac2HF%(VZZZ!7)b)M!-AWv*4d_YWjeJU~Dw9YzaF*8@uR@> zy88r5pSA{06qyUQ$;GYN#SI}+Prb3#RI|nIur{3#9j?N=DoGzs#ILG!{x)=8Blzky z#q8Te-X>n^I!|z0Q(2f4(!IS>?XMdCyGGsK7zuw7%Zj_drFNI1yNXT}o!JQ*{Pd}= z9hw5sgY%doYnggIV?~E)iq4YmChujh275nLX*Wx_;!I~iXA+hDq*AIzO8QR0@mk92 zytXE2DV+G$+VcK9KHe)b>8DNm`U|=nB287LN%U*Fzws=4Yvu8gUlWgF05n1I{HpZcyWd2)xL*5A-XdV_U>!KUYS)gJ4`72ByMZ){Bz66N2uqdT8ibfi+fy`+~=hmD@ zP3!iJHpV<=6AX6q2lKQkjuyLn+$MY!G^4SR*WfLF{DJM!O*c6cp4r||gn}&GdIVIN zfQ{XjrQYi>`~(KmCdYdTNmlkn*jx4S%f2i=DSKx+yM42h%x;*sQC~IoO2R(BrsA+- zaeZNW4Zoqm3C$~DKCK2piKEK5E(C8Z$-;y99nDf4O>0^$ef<1qPGN#jp|{Nt&fC5? zLT>4R<&ny2+?EHN)0QLTFk0-oAZ9iVGti8et&?iSQ0~7@k(lhhz_#HJ_lD;7H*!pU z4;~X5lQYwE@t(s*^a+YGQF`<;TMh% zHyP++{cLi~?z26LI9Q9roqG}|Xp8k|%W#)ZA35x@Sf3)L<8x)dfZv7kxhz2ehl zEOVO^N_3S;F(G~g$a26T9md3X(UmOj7ab1{7tDT_s6Vw%cbuA}Wt<$+8GyhsG2blC zI5)dUXx@xM_y++YbCxJ2B!kKmJ=>+c@l^=0FJ0c-)uP7--5{7YeI}_Igo-RM|LD3b z$+R#F19YuIEM;-)oB#`bfgAYtf!&S%YNUfb-Kom`sD;g;?!;}kF`**lPQUzM;e~1! z>vykIGsmwM?VAH4ghEiB7K-{K_}YxmVJnS0Ot&COW|rOiaG{HP&#$}uXl$a9Q#L;7ceX$F&870@3vwEL)*JP_dFyWcGdRb~Ul3yRN7`m1xet>iBxbCYPwq#0>RwGC|T zk^)XN?7KXvK@Ui1xv&tvwL=Bz5vI@ z^d#AXY(`bSuj_)4NCG-v2eg;%-UqFQcAv1Muj$C4xQ)#*s)kyQsnwaU)|W5i*nYds z>-f~}`@O?koAhg3s74o)rmccvY!kMdJX*k|_`8{?fnls_)SCheleEJ_^V7J6nLjy6 z)q=hXBS#|>R+xWYFLY;eaWw7w> zle*2z1QH>j3RLdeGy6k&ZZqreN>LVbV9Qs+;?~DErHbG0hBP0_x-l)MG`B zbbb^Y8(`6m%)jciyo&?u8Gm3m;JC(60(uyDfZnMu-mF001KlwI57E`L+Cj@cnkYpR z`b0Kj&VR;B$QdI+o^f&^D4TL2nSw5xVU<3wW6|nN*F-BjAQpte0@EzhbWL}QwJVN*{Z}qE6K{ai?fCK zGKfXhl~7AN?3PD+A*gJRKPUToiujX)6?f+r^V$ZS8A$7vEIM(>9^sF|fFELX0;#b; ze0XljlvdRd%H@Uo%9WJ|aB8&vM4?$29THh}6y?^ySx1Jy42n}s`)|Eo3q4y^(TDj80Tg!351sE>0rI9}tNvFK@y<`BN83b^ua? z_M#CAkw7jz-+*TZPwF$MXzDgE6<1T|OEbF501J$7z{X+jxC~og2$V1)Dx30!G{#wZ z*u}}h(n}<+B^tGKpd`uf%vszfU+}Y{adOJ}^)gDy^t8Wq8S1^eb-+K; z`;&AK>$O|esaEYji*cs}fdo8uSYiJ$S1848*Nj}i0Wd(_uWvB~RB6H`aOUaN&bL`f zX-aL;LmIj4n|oyxnhAkGyu-0=QP3s>O&9d)qmqzL@pMP>JID}lv_WV-JNdJ}mD;2{ zBxdoIUW%infJiw3=jFF$o^+~~@t@q02RB>Icr2LTmkScetDdFU=j?e?N#oTwx#*OE zCrQorCz!L?szZHYy_8vZD~Q}*@JZ987bLlhbQDQa?EAyx$#TCaq_#W1D)I~j|O0yv3gz*J!?{!q;<`m7g_Yoz54ls68h>rE4ZvHt1@45SZja! z0c@8W(q5i8C;=$=&tS2y2zx_!vWrfJa!okF=R=opxUGLe#+PW>)G@{50EEKpodfpAh8+^-)Yzhsjhd)2NvJt4IgTM`v9-n3bAK;-I z&l1gF>-r9G&65oNd&UU7;Rzj+1yl3CljMAWhLqF@CJNRyO&wshC+b*%qo%D*oUSQP zFN~zYk7apsui=s?55dYZA$v@b6UtY@d(Z)jxXpc*&XQJ3mWLESdFTvcpEz z@Y2K&9kNYt+C)Tyhm_yQd%RZvc$ZHMpYJM@D>J15bP0^4M3R7561KS~ym=s8nOsp@ z&uJpL@M0+^WxS9}t2^;9PM44@^qP;}xd?p4>hEt1RV~9=cfRFBX%ekaG(4-Sb17$# zae%3qy_|;)L<%>5OV#}TW-(EKjC#M7cu9M5>1)r9P>Vqaz{i%tN{XR#qr?-S*^oWc(a50oi z?aQ7g`zB5KEFG&V3sM>{21lRHLQlbtL8j5e=^rytczdQZC}94^S>gy*fP+eaS}#>yQw{{tYrdW2rKovQ z@D=V=S?5mu?UL6>gXdR_Y@`PJWmm;~Yf3_jg?O(%rDkkp2J%dcn%DN;W+J^1D7&N^ zBsub=kKTiI`!9c&6(y5h;6CE{wDIG^%9zhT8z1q&E@h!QfS`rmaEUOBFt^_Unp^0~OUB+E}6Cbl9^sxnEBpK(0G>i!Yq8M7UaAr%4WJa=ZL_rP}w{5tw$GLPp z!!(d6rOa_7RVkl>P4v}2hgaFsS9&xr8Bo2vyLZ3L&8l6U-%`GLX0W*{)(!d@i>pE;SF7GXpZFr!ZZOJ$f!tqg zzjseJ!*m5`32p> z{Fjy6B=>2{1VL|inO(S62i44cV(P05MkxHX^d;7wk#L@hbahVo%+8SG79;jFqNJig zH?qR6*LBNFw{ThT%nxh5%0PqyTl~yS46BC%Tu-eF6`P*`1Uf(-r-@iu@wh77YEtIZCZ z0x4J=Al7tPd8O{mftCC-2K2w^mcBafS`*gFb=iQ}0IW_hB67ljy}(~8ZpB6J&%3s- z;X?`hgTN$U&Y1VIq+2Zimhi;+FZ|H!*Mhds+g zVfiN!OmXH42^W##*BrDXVJ>MONJ`e!o#dz=Pm^kYr!h)G)X&;M11!_aoGi((I%o|N zkftDMrKC%%8HSq#&GcHojD0d(7zEY1vp(ZMHYkfgG$6UUXX7Y3$zaU&!8Rra09+ke z7P{Bfm3OW+uE$6@05vT8P1KuF8gTs!a6PMn%#~?MZ=FMQUIm=JtqhT=d-ch50{| zwO@l8h#vU^Z7sgRTLml`Xi$Yy#NVG1UbUd77KhtmTm*Ul>u8L12asD#5L)v0rxlFmZiIHh+}5CDr_{r z)-QX`-vh|F;n*svDrKRHE;GB!aIaQgd3dnG{=3igAvaO3H1GgQ@5_ob41$SPAw+?S zi6@S_q)-1m7M7SSYqo$U{PlNfL8SWfTMx?AJ#@CljmOU5JFgM1pD4UnMf?#Bq!H|> zEoCVCZ)NDK#sc-~fn-^~i=_eQ%i)rt-wVFNb`%~wy-~SXPUv5wr6z#)FAXcke+va# zkAyP#Q^_Ybo3;Z#5t9q^e?*sQW);Dji;J5}sym^F%R6{3XuzF7HXz5K;(_4n z&jv)|FE0wY94@U7l2GCe;QOKmqUA5ZVIt&Gk{=KfE9rXzc-uVq+83<{3qQ88PNUX6 zLQ;aSx^qI~un}&iGhJTeg>WVCYJ)nTE6?e^z1TvpP0kM6HU)E7dc1yKl|b#wOgH|5 zR)md!V}|Hob-6;bI&iNeOdH~atW>hgm>8X0crI3!igUYdi+({mLhkQQx0>|D=z(F_iyaa*t$!H9-;u=32eQwea`AK;RMiEKrL zPCw|FD~5!CNyKU$)O0UuJE?NJ?>BI4gMr`{>cIW~iF_|^097pF;ds~&CoeAbGn5on z`^UobDQnC9QMtg^`PbGNT2f$|xxMrZ%?IQ*in0UY&u>N+5`vZ57l#W@`hdUwP8DG9 zg#Nlatr=iv%+RI5uGGf--|KT_qsFsl>Ti%R=MSt60e3udfQeQch+e}3b>xcKG@P8FN%g&Q$G8SW5UgQLhi6g%@2DW`rHpUPsj^0 znrF)?Y{XU(5$vSF&EP#r{_}t~r{nPn2K5ViMs!d|a&k2EKf$`p02TB#jk!B(eWm_1 z*f7fJS_EqK%s*%L?D`6ObSe-Es&ewwfhYZDp+R)dTrW@o$jaQW7+t>J@3qUXf~@il z0@+4oN%GCNK|)pjXD$fsKnDr%1QSl2pt(tkzwd>k`XAb4m)x?&{hx}>4SZ>7S;FN0 zJQeQ~h#L1{&1!L+w5YgH(^e{rdE$;UlY-m7#?Y5!{~1Hs=ba!5*cK}3@$4Q@vVmdC z3Uilja2molyrTXi55TE{`P)}<>O}r@-CjB@R{cU){?wmEfWbt;@e1JQ12GKzJE6wDu#|XL zeL45ZfqTd@Pmu{QK=GHm7lRzs=1!L|^Hen@#2f2+4RVoRPr483!D9D55W5SE6w3$t zq&C@Qo+uu^vK*mvbn^*$V6?hJLmQ=jjQA1ihVK_O zKz}Cjqtn!sT{=Pgu;8_)UZqFeZGx*+Mb!Rp|CvQt7CFx^uvahH{+ z88LA)nI$XCmvWbQ$|psq0oN;(8`#8R60!3FuoFL6hI?C#;0 z+vJm-%~DuP%-t*+9@?sTLBb2?wZd9vwX+~^HuY6+S01bshvhIxdXXo*LNsW88rD*Y zDA{&8FJTibZ}ktB?BYuPW)vNRT5+zCA|+7OJ2qie{mRbaRDmAK!#W(?lo#VBL7iy$ zy`$Sa28Umf;7E$=d`p_wq%CjkEFLVR_2a|za~k3Li#OFI7pDb3bBn5PPYyUHN_XxXbs#D%x0QS`?A;TmNNG3J}5Fu!RA(6_oqgW|t z^44H^hGu>yJd_UvtI4*Pw6$lnjIpnHjW z`hyXb;|@ddRfvxjJGGy9$aW62bT6s|Ybh`eiEI!s3Wmq4f-Mb}Fk>QJ0 zj^wHCn`M`b9{S|)tLd80+`cO8=7a` z>4yo7HILx)w|jtSeAaok>3CW|$n$K2K?xbql%^NcjM?A9BI%jY+H(UGOG^)HJu9)Q zQj%AoM3C{I2*3h>S`~x)qzi=P_|9aS;{bAGc}NSI_~=7L6UxCKZiF<$n6bT6orBO$6grJ3U zk`&AM7y~NYL=HlDo?m*X^TzFun1|TGh+WXcIBf)HUhOj-WyWF7rX^uorYmOLJyERr zZ{?zffXkLPVmrF5j%!wIO*=)&hQYo#z43}jEy;SMeZ#?&eAB^3&f#%54Nc55s>#bH zvPcTlOVT zI|WNQ63>v!L((WyW6x7Nn?*pukz5byy&!6J#{3t$y)ywryDl{PK*7#)w-DvHW^!}` z_z40IzO@Jy)!f64AP8?7H-~ZoR^*8A23}iAh6s-x26VR6uBb9!K7Y<<>D4|}IpU2? z%N%`Eq}O@*qn#8BH)@qT#t4V^RZ=e$mij@quQMZcJ3>zfJM^DDYgefVT(<#L%YR)6 zL0Yd6{yfnW#Emy_T-Vi<5q+qgM@)Q9s#d^9^`hYZ!|Rhe$~#jyh9E6xL__qCB6gZa zfH%rBuiFN87kmh7=k=8i0^A{-F@h$JS8-*aV*a& zcbQ}wzP{8qnaF!vJ(iYD<{woytRATdJLW)?AbWGMWDHuvH^H7w2D;z%3I|PKC{?I7 zLt0ru|Fa?RX=n4*0iBeLA@*A2ka5WK2Y;1Jd84^aS{Z z!jSzx=GVGE&j5`i35)g{Y&r2Doc`-Ucxl}u>QxSp<{HZ;-dpJcOb9m`;RBFC*c*NW zEl|(kK5idAYi1e*z>cJkaRfO12*?#BLnGV1M^-KCa;ZtZJi77_=l7@D{;+*gJzXDd zao`Sr_KQ=I+(G8*;h?neRTg+1?lIuFSnh2i6oO{QPCbf%DHX9W9m^8XeNOZE*^M~AEV`dCVjgzv?Q65&kcE>mZ3;J zFPzPq3%ePM9spJroq7I0kE3abq9kl`oAS=bLcpF{c)da8ghc_TjzGIe&#)Oi%Ug2n zk9{T^SjM$`aElP(ocEQe0b*>BdBN^$xVn3_Gb#LM6OchdLkCWL2#R+ur%E9CBmsX? z;ACR(S}Un_R0FbG;=OU=mqYU9vjZU#w$S|)D_Ure&951%o*y@L`+uEivk5ISj-2Gd zZhcnC$JX!CbcUU7DDov;$5}&A*q4CYWMZboF&fq^_mcJo{SHOkH#-D?__b@EVs%BuA^i!)%JKut;}A?n<&BVQ-j^Y0vO2c#S>9`ML}Uac7} z;Z=X5F!LQzlP{yDMtjSCA|Sc`*o(xTHam)~ADj{q^4GKusWH;!B62UzdUE^1oELYL z+>%5sc!hTrz?UNHe&|Xvu|pR4g&W~}wBG0w#lVj*D{ZKrBuj1Vc;}e=_5Z^_V4s)2 zDtBgM?8H9M9;;Re%8sIIgUsPo4Zn>Hin^6&jmrl_c$RvFl~$2o8+Rlcy=PIlcQ;&- zunT^w4Rkw9< z+3gh%?Q=O31psVy&Ke*q6~P{a8G;nQJ2+z>CLgyk()A!7eZPzAO;nu3?b306PbnQ- z-L6z9RwHr)iQt2s&?wCKPW4~1M7dJ>Y>$!m_i7c#T^$>nt6rAF4_qXC5Kyi19T;Hs z0G@#Y-zOjTpq>Pq10;#Y67RV)N+1_psIt^|#0RX>Odm2kW%e%x)*q;s4bdIV7d-;r2Z9Jf>gz5lha^Q> z>r&Lf?YmqMN#*GVitl6wH7@KOcg}$Qk$7XwBDyqQMY>sjHSc%K6&pb%4}8a z1B)I9=piV8AK$&{&KxU!tmI5(TVzwXX_2SZ)4RJ|oiv=6s?z=#9K1Q(9$f>`L5m?zZ;jbq$k0#VNQwbI_eQuU9R;ZuQ9&|S5USwyhlpzwDo-(@Yplw zDLOyA9<97}%XXaD@24nu>{yX6(0$+8PLseQf9V5oV&|_tTW|ii;B|=g$~LUE?DWh5 z?^r3k-{%N}!jctEa)I%4oQ$n}N>g7zI%A~q825SYS^R<;f(3ro#ry#k-G{I*t{wE!B1|TPWj)dq3-cmTesovnzx^oDF|Y z%bWiR{HG3-$v(;v3??qRF;Onid~DiU$fZ}z{!sRL;&rTnO1>Ow`amVJPdHWjrIbU% zWJ>K*N6Zz>p{dw?a)0=&S-@^0A+o2>eGD|mzo%bC}nusU#F z4Hov}E(57uB|-+q4OZ*d-qS*VE!{0M))uiq4H>Hj{=)GcxlGET8*!HXkRFR=TK?u-px;IvZp`0Qmk^(T?AgO($iMyVWYF)*yOY{hDQiN zA?I-^j>CGP-vEZ>W($l#bSpaF6d>?9~4gkj|q1++}sVvc;~doF~C<2m4e600(^j-#&)x_T8^`#1+C z0wu7&o$k{XKVXCQh?kMn`75`w(x^^ORD!c8`Of2e^HPg{V9`{;RTw~~f2pPBSE@GN zzdq5Obk7Pew(8GIpB%0%0%===S@`{n49KbDT+EGdP;SNn%D`nCnMM-bclqt~#EmEX^b3cLjUi+uXWn?&u-k>W5 z8lq>HpbazBKsEC@cT)-JWq;co{(2osTm&Z`$fjKCE?_-YCHqDytTFVpaTEvd>;gMe zOse7%Q7lK_CDwc7b+ZP3*q-SB1}ZnqXe#0sUcG*Dvgx21=Gvk#BXDFBpLGu)77Pnz zWBuXQi}!R$^*0UmQ&IDVQSlW1aN7;+cz`{?KTaC9dC*l0?x$#xf&RLD+mKogTiIkz zH!hGI&%B!?j9FuD8c&2&VCW7E>?XTX@{RdYRN*sy;2_<~?{O#ZbY6g$3_it$2b6sI z(!c-Es4h3ykdL@XKiF@Me)`k5uiKU))zn96$}0~ay8leE3WWEj^KQEBFmMad?#4{S zObEIMYP4Lr^}daDNV>8xvTp`ORddGxqY`YlxXO8rOrm``NXe9*GQdiV-M1qS$T4eWSRA#E6hO= zoTpZl^qhJ`ylJx{!S7V&NhNGiydh$@ZQ8DJ`f}BE0*RYC{N+Os5%bD;(X$$Uh*Ql0B^u76+ej~IC-lL(Rmn`G2Q56>y0rPI#iDO=| zKDuYy3!0PJ#rd*!_KqtEdGi3d44m}~ZT}R}{H>bf(M-JK)cDXu^zsn2;-s#AFQU}i zKJjvg_g}X>8vTEMc_8tz2AC1j6cT+4($W-7C`)$xKD$> zRcq)Z(s~GoyA4#d(Ae-IT0t(q_6E>Z?ViE9Dm{bNGk35>h3i*Oj}GWwFkE>P0xk?# z<|66It(CnF&ZQ~yNu-9K4-0K43Nr+UNxG8vB1sw!S@u%bX(6M(PWg(KH{g732}=-I zKaZ1B-d1|x%qIuRxoV+n`^qdQbmEk!UX5)W%s1V#X<-)m0p^_VT=6qKUeBs(V2_-Y zwZe^bSEb0$^0@q72gpyw3$f^}O9EV?;Cw#cy*HM&&R8PJf8Fwqh4S(X_vOKXePobV z&7;equvh+N3>ppG^5MeZm^%&VDMK4;zr1~yf!Qx90re<3`8vd69b&L+21f+Y3cwTr zzq}Vqjfy~#D>?E`n)|_fx)rZ($l>ZcTmN|9F=hSmd+)9{@<@RLiJ_tS!6_$>u`dlA zbQLKVm?y+1YcP-ng@>*GRZH>_JY1djz+=&9ohL6Be(;}oYPiUzG}7#ktNlj2X1^%3 z;Q4VM%E1N!h8*Q%G#Wj920s1@=;P+`Ek!%eZ7!naof~>`^J~ zqEz^7GQBzZ(ZvE2n+`_w?Du{+)CEt@o5HL*@VM!Ul$S<$EDY6iK({4p*c8yHkBc0f zfHVRY7qEc_LpR22V?v#)l_82}L8%)*M8>gz%&MC4OTVk|w?*a4XGpv9IOYO#nfQCr zHXEOXdRYi|3HsUDX5p9;*f^YMMUQ2Rva&0&5xDvi#5DMC=^{0dW0W+yxKS7 z)&TRZp`p2LYT$V34_nZ^?mGwrcBS>S#|nX5mcMj*bX4Hkmb>Tjn@9 zyI^JPmZ8Xkf*-K=t!Mt2Klab%pZ9_H{5a>Hd+vq%o^yU{3tlHWVpB$=U})DS_F$h3 z*TD+YxQyQ!egc!Qo+UajaLanQ_4u|YJr}~t-VRvn=*Xi10auPc{zcLLcWLO^laqk% zG6z1dK~pw?^1t8T@$JWGW6A)%JdFkTnt&Q|PdBH(TqfIi=CK&SR_Bui#^R+#ok*E= zK4}3d9SnG#poh`>UPaTn+Qb_l?7nct6}cy!yOevPz6MQ1{oIBI*D08+U4^!a?$|_) zXUaZ145H9S_m+Hks`o8833H5nIdw&mk7ajuQIN*3NFTcWnkYlTAE1eX-p^olX}are zq2tL%ZvH2J)Rfd#Vqe4SE5f5@Ctz`J%Mpi20m!vA3gO@QT`A%Lbkg3H&rRe#$nSI? zzmH!4TdoII2EgWktX6GwM8p{E8PI*t>Ue%aI3ugXA#--&h>`-@!t@TBY1j2zBs@mJfwX};A4gqh28v<*nSisk+$(k76~dDlgwPoHrY$2iEzzqW6#|R z0lnJ*R4zSvlQlWZz5YK#OYXi5 zjEB|tB)nZT1dzF|)D>sJdI_}9zf9nwT@h(StjpcA1W>YKt$-u>$n4YqZ^M&WPD zZie%^I(Ti5>c!lU_;?%M6l8L!^AWwOpjssJ9uW7yx}i~8=f<|0ZO30Zy8zI*e9JwR zaA#9C*Aw1umQGT(|L~M=S{PiS!MtFc*jRUPv*qmkJc{lAVs@aE@w0KhVERA1vu{SZUweZn z)>BU7O_cd1ocbU-r!^^Q*Fb6Kz!-G>v3-VcvgVldv9;AYEq&B{?{D}}YaY08U4=#O z>iQ-hz3>iN>{5A|ss}JEN5fe(vUa+j#k|wD!hwN(*-t!1e2YT5dw-MX_W*#p7Qxe{ zl+>?rYE`b72L1ZU_F8s!HBCpcO^lZ^O(PsEx+jUGqjn;Bub$!tgNx^+q9XKI*7B5n zr?z9KJ0^<1ncqd|BVyB=yVpX2gRX|SNCk;VVjaJ7zLg)<0W`5-)MTl1Vfu|@-btE! zBb5?T+q6BoFF&V`ZwrGIN{Zx!&h;To=0cc(3Y2CF^y-=TAIBHNZw_HaHL2pn4M0<% z*edEH3h%$mD{5~U|1|W$^nAD?`cO7LHaplwGULUn1pz4F5Vu#`wiFl3EhyW2&+A6uR z%P$keZ6xziP6$vm`8O=jXf*z{Y4TMW*ofPhORLJMxY`PGbw~%^cj78shHTfVdiAoS znv!N%Ei1$b2qyEK^O?4%yzo;8^956M$Td3{|1cE6kZUp t0o4%CJzU67FUSOZK0heuXddrSdVXdQw;-!&CKMF{@9&L`kcX$0{}-j^^h5vv diff --git a/dashboard/origin-mlx/src/images/explainer-icon.png b/dashboard/origin-mlx/src/images/explainer-icon.png deleted file mode 100644 index 35afe343e05a3f39ea82f1418519814a269bd930..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1469 zcmV;u1w#6XP)8!o#6L#5i`GU|%j2-yX5=cJ6j> zXLe?Hzn}Eio$mJ5-+Z5UXLcUnfTAdhqV&fVz70sgdSC+B25gPqj{#Rjx+Z!BI0wu{ zujhbMz>h#3n2FwB$kF!Hgcy(^;5J|~(sm>$HfR7Rfg_QQ0smS$cc~Zz?gyrUMc`6S zS^y3qfgf;Q$^tM7yb7EqzaW@23mlAWsvKj$o5=m#cOcrej9fJn&PpE;TY$sBMf^Ly zmm0vw$Ujf%SO+{0oX5YT(`pHL8G8*2@9YGA#=m2;Y6h6H?3-MvA(dnk|IW0jw~;Hp zP>cfK;oo_#^aC(%&0CJy1N?)3r@7V~u*;IqoUs>aHu`o}UTOeOS@E0$_EEn2B8i$v zD=a7u;@>g8bs)1BE%5^Woe_%mXY^%e9;ceODU+JOlbJl4fjz)V4+E>H6<~J;zxKr# z)o9xGt2tnE-`-70jdDNq+0ysq^hE!bhr$(AulMQW#Oy>X@ic1UutRbfnJnPDkVVr^ zr0BXIOnM;j67X<};}zjrq&w*=nqac+{#n3dpFcu?pxGkV)W1>*gpo0QZ=_>=ux{)=g1b7=3H1)Yk!L zxV-Md2X#8<*S-ThWZ~SK@Y`}+0IowS`85m~esC9lgJGhzK&R+z1nvO7Y5&4>%i7`8 z90d$MHU;EfhlVIZtdHXYawTx5TU!+1ZeqIS;{vh`8T(M&vL1PAUxO(iNS_9%2 z4M<=l3dqgw?NA~*=5ECWWK#}?C_;y?J}s z=OrXBi3`3CplmJu)oxteEi2?Jq-=CtA)4PKFyiWvR@ZQd+(-7+uc6c*AiiEhTtF5H zHy}>~kN7siA{_yVyJdA8q&Oo{K+fi1h$3|OIxZl;xwk`!__h6mxPbVYvs6Voe60cT ziv}bx5(h*xb-L#Qvbt&waRE6G9CvPx@+~nrgiT#1U%0hJ!Qf*Jh(A7$`_MFV@i@|j z5?ar1E0uUwd`~4k3!F&%qeGN)JcQ`nKFjv5$*^wS@6&x0R7r->x7`AA6iL6W*yT^) zOVgL#0@B3dQeNeMrjg9vvFM`De964%a~Al}rbQL!eYyk#l5OZRj&!H!TJ>yP1a2j! zyJR&@=)e`9#c`ZM8cGRNpC~*$Wy(ptm=kP;FLE4C}>giTAw~nMGYBT@m<)^m0OxvfDyu(B_E=4O{Cmn z7n*83PRqap8T^`w$IwcCwVJ>anLKKN{rGo8D0(iVFRgI^|IYBOU^aAVv5#Wx;AvYy zZh6!~Hw6oj-AJ>~x3gU93?5rkX&Is15057(;HJexlyB?RCbI2#p@+1mkRDIp&djPh zIdl}}MGa|%E#lv?Y1P`kyOcS^#*nE+MM&=706w51$#^y+_u>%uBw0qL(N;1|)d=#0 zJB$B7{1MqQ;-F-Qx#!+<&ikHw?z!jOJ4ufA*8Ds&JP-u&+uB&3 zh9EZZl?~dx3w*eT%7%iEU4G`L%ps^Ejd$CN1GE)R^_LB^R7BpH%Z=Y#?sY~ClWEg|UNR3$yo;tsL75C%a4Ev$dUy1O_aASF^O?@~ zXY5D}d+^v5l&JCYW|jt|h?gqgzt&0{kkW77hJWbIC$qTdJ{=!5JCrV8Cjky#aNRx2+(S9@idh^m#5wL|gl%7&!LbEodi=E1h2`y7 zf2VM)C#qp&C+!Sm`R=eVeHGvH{^5@WyEp-arQTQw>W(=@U8Lra?6=kGr-;PM2M+y9 z6TFp}KmW(|3uJkkO39qf-CN;T(b4972lN-MYtbQf0{f-BJujtkHYaWg`da_EC*f^( zzMh%E>R(+@t2ZszXGS#ZP_N?>P4LY*SGjuH8E?(Z^r7_kOr;4*oeWI_Px8rVWym#L_zTJHOaBq9~DB7=vl~8ggTa(2laep0^+9_Xn`VZXXlv>#GI~= z;?nJvr#m8qZ2uh;gdDuzv#68mkPk4<1DQD_IRy~(=F^RJd znx0^|bl-z-%IS-O1X^xmr#I*>%3Bif^vz?z;3cqUIss&V2TuWI$23_$f4kG6;}W~H z*zYTgON<9or0s^^w%<)I3av&%qG*<(oZ{KchF`HPBmZ?4xwn!On*ku4-rfCp%yMj% zWj|vQL*Snuk0Bv~b7D)P1p{TUY@gnk-$cQI3A~DR33-i zBuT!yNi&6E|25fkERjsZzGPGI#zl|Gtt{JrC6AU{W8O^5&k32em}RCqc;%w+*F72k zcyR=*Sc^?2o=VXFR>5fnGwDeM%l6|64?-VyGo-U$@!*M0k+C~&fS~z z-PsEE-2A~8ziZ$Ug@Y1GdIn6aBm)>P7ClnojH483s}t1hxZg~qk=}6c5DdU4ayK9y zym{$j!I3i7@fV12Fxb4_)NgDN@E+ZUESiquz8YjkbUqE+cP+1}*l&&1U8vR$uTyIl z6VbcVPpE&~fHhPr&v*Qzc$S<@+&Vh2Bq{rwC~v9pF=pH2i@)ZdFCP`JOd2zFrdx*( z#N50DfhBH{Cr3!4X=9vjauU9ykHDf!hj5{iv|Lx3jSoob zhj7t&$}R?;2Fsyoe`ucRGR{4pl6zp+J>A`}EBHEk?xDGY!_c7PCIUXQo`W(T)Xyqc{2XHmmtUF9l|Wg|l}VEXFgR4=@8b z6&~2Dx3NZ@R_oX(14}HUA`Ks67qTryQAq&Yr^mj3nG5w&Su5JkzmYZz8pN-Una$seIZ*xyyQD~K3(S<3Tkq1YdKA2!;TFPs`vGZs&#U}Z z=0Tl_Jj$DYXqfcz#5*Mrl_MyF z7gnyt_Z_CxUtt6I{35H5+lA`ePq2<(GfN%Bh+-m{GhwN3M3 zuAi$TtF84WrnXZ9raglB;gM*EGxzZD3*MksSHc!E+jx_oPIS6$%*@cSSfr2PP8U0p(^(d6tybaOaT6vL zwcK={J2E)%^%HiPVlsJ#348!Ib?L4H#`>kwm>=q+iKY4lJe(mGwmqO;RJ_<%(`#a3 zQRbbtn1W8c@v3bZdyxGqn>E#sA{|x1|F)N-sV#h42O?{2Ca!zkc5a{(OFkFzw8J2Z zeW`)yYxtf=&XG8DtjOUP+ko1ISh+76;&3o})|RlpbVb04Qx+dLY0Bg}$UeidH8ydz z&QzC26`)P}EDN_UPu^@So47^iODZMPyb95YgJ=DK7Z&UdO3)|hD}R%ejIvg{!&3?e z7f7426QGAg{i1S*Ob~E=&&mMry^6C~jHL6u%K42{xFP-@Wwd=3#6lT)-)QT^vsEk~ z{ykxK>jwy?B^a*6^Dq9R*cx>MO77qVG-r|5tsOXV@f|uj>bbPpk@hIAj|Kest9T*x zp*fgmbmtKJ%X{?3W{R}l1)<|Ws6#&M5~%8xY(ifcrobXv(T|^P zv5T&LFDPa$Xq|MOHC;N5^ zAL34x6PP-63=fWi5^yGed-DC&8UVxA{gqoCf; zoW9#PZ&|?cyfG8|kjKo>i$fyXPxm>S<3k1md$1dRZ3Q5z64^5&n@r5if5^e4nUNe# z0AIrakx4}sB!Yc6$;g8}fV7f!BKu2~+TM*(tH_|3L(S{s2s+=sDXt?zMO=N;uy%V_ zg(UO^ii)aHmh2gxLl*p_*$$udp@UrLP;8Y-7NT=Sz!7E4q}y{8Jkd+ZZFvJMF>@IS z2cMXRu8qlMPUh~dyx`?P-)+_Gb^aw4KIPBpXpxy(!b-oMqj7A#46Gn5aGv5IW zmzs=#K7mOR1KW+q?8pG{*O@!I1187DukMgIbAh*}P2>aCkYhF9OpaA#%E4vikBex! z#E%}ng1lrR`{i;m7mT%J*?*7RRGsz!=yOM&&G?tVH#N&63!%P ze}QDi%usQKAk+O5v5|w0_5Qjsn&=Dh#~LoifE|wn)r2t5aVnPmDdJ$u7lvo}06Qv` z*vw1Wd;b^}>jS7_=X^xIV@hnU?qVj~BUp&Vw_!iU`{^C64hy62oZBVaCQunucXued zx;@VqB5pZsx0)RD7G>!FUhG<9!Y3`bJ>Ealu@yCvS@$VN-*0J86TZtc!{ zohZ6rU-!IQ^O3LybilR!Fa={%ZHCt4?HYw zZf{!2`7q)=EW!JQ@~ei;BqJiX$V40`Q^Pw&rqOBzQuwg?+8{-t9_zVD6-~oQ z()I@zJiB{6y+1b)468-Tb(x~>#!N}2>(f5PBXfPnYvV(Lf>g!|YjpT}H*|b41pk3Q z4@a(y^es4d`FI{&{MdHy9ⅇ49T_(@5 zDaLsJ(}q3JlvHjz3hJ9Yq>30GDN;Ic)uPozt-Dls{Q7in`6Np%V`(&OQw#35%b$)jSH)lr z_*u_cs8vZ$2(J6=Wo%y@V2$_$$}^x6AaXlcbK}pI8t>KJJQf0`BWfQ*Kn<`x zx4q$lh%;fx`FWfQfo1i~F+}l5A;f}`1DoNmxiJ`q7Ef{|IMYnXhXFmk7Eu#f1O#VD8Kg?C{XniiUY3-KADK+(ZJlGvbw z(ii7h3@3drG6QPR#~0&p<*TaZ#Sp%DCkH&tv6xd*R*gJ(ANeO({W)Y&a6je9+DCBsVDan-cxjd(*(9d#N z5MlBJe>tM~U)S@V^S+EZS|V{Gv_eqcF!!7NQjnAV*6e5)nCtQ(?8MN9Q(l`#sP7li z_xm?$W@EA?Bk5kDUfYY^T%W-v^K+O)d-cf3{hXZUn{*~jwRZ3#MN#3S#<}t8=7+Z zD44`X{T#t0sjjsK4i16PpWJjA`@WIU3uGWGfexYoo>QK^fRB2RXkELD3GnV%I;2 zJO{~^OM^6-Q9Ob*P{eGdJ=W#5_IiWnQ6f362Ot0B3k}OGANUq>Z!12UF!b%>wr26; zG1m&7=S^Xhz21%=q{(7^H0;^_I#VHS>oUp3<73mmnO~Af-_eDWrh5odTG0!B+TgH! z`Z@ciWw;+YxrQQq4?+$&U&2=RUk>mAqXMfGM%SnvdXWn}^+vL5mk;%$U6~*gM z%f{>}S{eekDYNG&*NZDhqPtrQW&dLC;>9ipIfll<$?Bk_G2-)!vi?V6{7$h?JFo1_ z$g^kTDiro8o;jnh(Ii{ma>41$+oAZ?ASXt7E@_?Ct&XzpSU#pA4(}yrRAi5TmwWqX z$wSKviEqm%I4gf(zdepD+)(u3{AF++7dUT_5YtSg1ZwOHO3sp+%vG$gHRm7}4*EgP zeD$UwRdv`S<0`VU;2iJjm(CUGTk;49b*GK7hep~L zv%d*kgx;kRl*C-#b3pCc+VGcSSMqkUC92z}D}!6j$u30DRm6dFrPdekL8*sFRli!a zCr?p?Pd{y00BmQAIG|B|;ugJnJc!OIj@+6^2BsTQT=J8hQv3W6C!1i+-wl_w80Err z{bz5c94+-p-_4u{``r_TZkYFpUH$0pi6?d6lW3hsq zai$>dtJkrSzbq;N50RiO208D-Th0p(ZW#F-iOYID!vof2Q65IAwY+G|9C}%*@#*p#@=o`7@s;f zAx4+5dSRFAt4fDhWOC$;PfZnXQy+!@{)sHP;=+Vjw5T~^EFqQ7H0h|fN|*kHBs+p? z(aL#)jeOLoJ^WtD9E}wFClcKCl1QpzW{cyvT;rFRvQ^4np4X1T8?CQ z4GU3sJt7U&E-r(Lakk|cn7?xm8#!?CR3HCu8firWtWBkw<~rW-Acq!Y z)VDI8KM-F}*dtc4)CuJ+g6c0$6PoJ4mPA&oUDJS6&V6LVy(&h-r}~#XB*r69)ZE68 zZeYcn$!z52kn-^<_a;Gts~FLQ$S(Euj;CPUerSr$>>I)U7@0+qTb8}@(6JNhZY*fs zK{1wSSUPhY&;x-pz4YWzNSGw)jdV;YYaWx%D-5qk;}kW{BgpF@biM6c%1_S*{{8(G zo8!qsxrd#hn9jv*_}YB&GHkHXy#a2aQ+#(3ku~w&U!dz5aF@$^wFu36UbSaMG4mZ@r4#g6H!fa4jC!`vSO%gHN~9`ZaFR}ZzVQ*VRnXhco`oF!+hvJl%P{_AjV9f`PT z_CBLGXBJsd!*hUr>@DV7_-63BV_x(iZ>;EZx056tyG6XCTWcm_P#eBfK+8|lRr);S z4{8V}J&sJoV#x5-n%WHAi_`FO)5v1^?8B$a=t~>1=vc+Dd_?BxPRS%mHm*Ii0v&Jp zgc?8*F4~)Cc`~hhq~2<>4RNb$MYLn!6J_i5OpYMJNQ_r^Fyx+SGqOQT!&EMAG|KO4 zuk5_=cT9qs0o?*e&$`*N@5F4rTpw=W zhR2Ed-eV^0Mxz_!`5@a!Drd8PKI1S*(%9}bxqGms`PAG_GApucj87A|HsYC|nUrW7 znTe?!zdz~N#(Jx>&2-HAQk_JYDxD~rEPDRv`6*Q&%wv|CxhN78=(azND_ahS@n%U?fjPc{G3xp0UOoTmExWyTLVAzzI3 zKbMWzxW*tm%LmTr0EPms1zBTQy4dAm&(8y;wU!a`W!&2N$H7aEGLmy1kM@ym^VGcA zICTgvY0XUAJdZnEqocWM?-mqcVkFp1Kb1e|=XdBPuR~PAKl6ilbEy<_Dcqf_)?Dt* zH^RprJFZOgKe5Tx?jkM@-Mxv$VfLJXPAHT%zsB^NSXK4sAVLCADd;HcfH97FX^H3r zp(Kyg_PhFHE^#y_ImE3)3p~`clzopzG{mQ2+JE=EXZ}W-E8jjMfY>!y?v^3AR@x?UwKgBCk_@nCfxFHIku6eV-6e+Lnfw#k-0DA@HfF7?fs@be4)m(c=g23&WwI^o>#-=t_B-HkXL) zzbFn*wUsv+$r1wdQPqX16F;tz@M z&1zXEq+-&0t1Y#ji|=_99@y+LCMZdPD^)XP?ZETDk&TX7KNWk~0$<1+V!hRVzjweln7>*G`j%m#Fl&#YY#~7qkpe=NmwkCqfaY z4o@9W)avJqjZm3E<<^Xt+_ky&6M|f#+CN@DzEKZM&$6K5ggh{JT_;$nl%J47XGy~uAP{kRI;M_bv0;x`~Y1|dYd&khoTAHG3qcmaSa_8O#leguWxV+ zF$Qcr#BV#+^aEu%2C{6x=?_!9PG`LdfUJ6X_FzAK(Umue_Z$T6EE_E~j#S^o;_W$#vZVimloR7pvyXeM{4MaQ5YD!nSVl05iL( zhC^OpMPRQ;{fCQKsi3AabWi>x$v)q9tlquW@2W()j6bA||HdF;5xG@?y{9=NRR0Xi z8jhRMF^5XYjdh#WEyrDnq}{I>+^BhESwh4{X&uStWQa-EmGsid3d)vc(XkqSzo_*; z)uor6x=$oN60e^4LOGJJyeR`BwvMGnVs_|LG<{l;Mq|BiCO;e;AKVG1>e7!Woc141 zO{))Qf?s8PnBTNg78Mw~qD5!&)>fnIt$v*vE{j{n^%MTtA-ZZRUJB8-pX!wehoy)6 z>)$AzW=Bux)M&JK!9u1JBgcjPam|>U+WXn{BaM<{_P;BASR(6C%~+6%e^VjOIunzwoWHL!Ll!}apNlkf z{lEVB#?n$*6_$@T`KFom;ItRfEQ$F2Uu8G4__-QXklUD*<)eh zq}{uVDRGwsQej~cK6Q|nfBRZqp7E`_i>-sB4HlMibZR=jfp$M-Ffxsmm96`R|k{DNG1BnGMEuNhx61eP5WpZAiDT3!*;O@KQQ{YkiHq zv30t5xp>~*bUK@2whtc>mR~*s49XmUl;A>N?JKyC99%Ji^ zC@~+ze0+faHe&ZS#YZ$>IHe3CU@m)ltFMVXV5P-Mc-mKLa-W0dz!J-qDo#0@0IPs% zOU-uuBO|$GikvnfPPilIswZAcznE^vihI_~23FrQtf!i@j&2fIoHdP~{jxnblx)PU zflT_0;q$n&SzUG>OhFM+?2^E{*19TvX{Af&uWutqf05=ndSBe*a!-uW%9mpvcsF_@ zJGc*JlT?wAioEZr(=H}tlvWFN&JgUhR{aoQ_L-XWz9G(m@Ev_;zEzF@2mASiYy3D? ztZBmMSaPK%-WHForTcn1!BKlmZ9bWdpYfhd)5lV*)x4vy(yZ`RJW2@iq|_jLBsk<) z9l)ERRxKnr;?jq-m5CSLuI0~T$jXl*cN!)CsU)Wt5}=Xvgj~e>P%4jsgx`@RO>yvD z#3(I}!|!GL4-aiKd7g|A94-?Wkjm5M4#q#!{nTCTHghmj$7Hw18okox=I$5r;$v$S zcJ6cMry#IS3W`D68Y-VcA#5ElykGOu+TW_rDXI1IN_Ak9YxT2(?vSUVoO+}*6&W45 zBt=no8t$$zV&P)5Cv>Jguni_;v`3Ziet0Tv2Bf}M5 zG(IcK>J_3*Dgpo4T(RzB8IN-E>3YACbtp$d?Tg2Kq0piO&CbNx-yK%pNUww>@q04y zvcS6>blP49N`%aJ$>gIu6u3;NPJ5*HU44%~43qkFEkv$f*lPH`++dVqHsSCjbJn1G z6crSeeV;v4{jt^FTkp~(yT~m0%8^D{G~TuRk{AvQ4{|0Zmdt?0L3&5Pcdb(6tgp(` ziazV{T<6Qs8>odDyBZoVJBuRSAgigJlhbz61DmCG2kATm3C+sxF9y?tYtb zqt+V%92@7r8e0mS%xH}m1W{o1!o{`Ra$iOc^5V*c+;V2h;XnS-Hb`c>cF!c3V-N3z z1$Go}HRFBNFt7D4FV4Gy9VS)x9)*xqJpkiSSP;w*d4~lqGk(KYTV@p_;0^J1rJMf% zD57b_3S6dpEJqR^K1L$(CG0V?ZPdfxQH@NC$|PiQ3M{XcA0)-yBYh@7W%wzDu}B%O z=3%KKNGXn)BauKE-<`%U>WHy2QR8WZmZq8xgRoNX7w2yb)Db;jw8uS#@Q0NM#wqN@ zjXt1Xp~jLo*p4LN(d}}V{K3zx2#4;~cF$K~ag(X^Og!foVc_Z+sN!^#oxYcMqzfiT zb<6x#$c__qGj24K-xtdcLoOfgBYg4NX)3!kR`vHIeHm_2CV`L{DWARz5A( zXte=0ibRowlO*+oiiGCZ3@It8gsHTtp{Yr!;cxKX*t`Lz#BrHw`hORa(__g>lT^rJ(?3z6H2>18{MMJ|`gIQC*q#8ND0{5na zJBY&p;#65J;cwHwu(lq3PiYQqj)AMTsRhaxjt@Ds*I66!I^mUPdVf3#K6&w>;$2Cn z*2;J8x1~Cz+D%^$v{J$Ei?>Q7)P&9JRgV+4Y^KbFYciXRf~k$2+Kr0fn)O-lueUtC z@Q;;`9gh)Pz+ZgdWG5LNJ_B$aT!kM9Ljc(m8(*wE$^Ef%esQ5C-qMrJ~n>b`-JK-jCx75;B#Zf*9@?*1OKL=uuzV@ z1gx&-DDKJZ(C{Z0$l`YPEYO4C5ciO6{dj$pyN<_z@|;qb@|4>lO(sn|O*ah&j?#11 z%h1aL!^<@Rc7S%TqGKDHUp?K57PbAwR)m(HE+4Oa{?0GzR0;t>{2;;*;+@CdE8ckC z$KHIsnQ?0LE&kh0)#f`nJGI+BGfQ4$uAi6RE{|>O!N=i=s|K6C!_n)Hw(EYBc5F_G zWx2JwW%Vw&7fWh*n*E;tebwDP^=i9jsi=4AmvFaNAxceDt>I|{!Wp@6AAN%+n9rJ* z^>6fD^QS#Jo12^#ob-rC*6vfT`mOqW+C30Bc?Wbl+&Z%LFY$FbMj!DXSYGO!OC1RB zBQDTKfm?Qn^pytKZV|K%I&&L!dx;ev?0084#K1z?!p*`sLGi80+gD>@7OTrg%bCmV zB*+ADrs0C{v8u7D0#U;YZlbcxDbWtE&er=SUEeJEEh#MHJIlMeS7OP>qsiGTGJN?u zxnDlkWVp|4mahOAdTBGtnmC$HSB_&qRxj zRC9!nJB1b;3@78%^m9gXK~Fy^(;jB7flYuWX(>Ll zXS)uW`bG}$TF=TO;Z5lP2GA3zJ_+MDlGcHH!!t?yGJ*mg`s)^YFZG-tTHbF?Gz%i0 zYy0{~bbK-tlu!`)!mMc*r!>->E#vmtw*)s)HC1TseP{f(UTM)0)n=E}ZtFlRvEZs5 zeP)r2iddN!85lp%bAEG31n@lv`B1+}jsyYw4NHsmyNU!)&=K5bo~u2Wb!<4EbN{0 zemB`=Qccq6p!gu)&DI{^yfTbyLa(me)3C{p!Y$QxDt1by%qRVO`g*!|c}8QgGmnSU zKD+@{T-owgq{4B~f53n9V&q`&AmU*$jh@q)Nk?U)*`~Q+i>AwJP3*3yo2cpRc8lLF zn_TK55%mH7bo|9zI9t$*GE| zDd5ow82ke8RahEWvhB1))mUi>-MMk9{{&CMSq?t>ak!)ng1SB5wisk;kiR6(qFeM0 z2YqcMD$O#5>5o?KIx4^45R+K3S1GhxO_bffnVGWwrQ@fHni*J4S^dz9ud$Z5;X)~V znyV^1J0;MDK$rg1hN){vEO@hT51rR`*lFY(O8We6g`F1@&{M^kdA1k?^&_-Q%REqt zvN^X>6YCRtKC{Q}@-0B1Rqt8cs(wI4b}O~-@wV`Ey$Xz_!e>6J#SOKdl9kiY*pRz0 z(tN$8zL*ozLa9du|$&ie^*Lj0bgFuHX>XYL|i<9O2C?4BE zS-j^nV|7AUX1mzIX}C~2_?>)Jz3kz&(5EBG?%21{6iCsgMy#qqs^G>CSm9kRDZ^D6 zFN!-`w#lWYsq)p;S)7zv9n|9*R`|#=?^FmB8FO*?3wq`Z_r}dr0_7Gyg>)fw})v%*V|5 z7l|i8n%O|@Eu*}PyA7i-uMqEZW|;?!jEqw5*0vH_3X1=%j(L)1w)gaOmEhy^@$upH z5#)7ox8vg%7Z>MyF2E-sz=NUS@$hr@wDje1_F(x(BmZhg!N$YN-NDtSarWD_w5&Vx4{X<-Tm15*2 z^FWI4zhp1-;LY0r1V$aS4hkANm~ZSqy1{5}5cBc$AK#e!I~63H9AL~lIjq+TFLZqG zY`5LdrkKjOx%FNG0(Whda8qA>3dZ>6ZUw?5bi&`xqG>oIaIK<<`t7d(0&9gC8yl>a zWOQARqurR^&(pa^i(P~%%s!wbeE}=^>gd~~jB-xwzvYHDIv1z-YPsXwPr&+f z1>E4CwH%!bu9GSUEHQhYyW8TKR#(0u^-tJ zllao7{X2ty=l68%fSU0R+5dTk;3x!R@7%#2?MnKqSA-TODu1mhBs+<8!ke@}{7<^Pt99A?;l5C7G%|DS|@++mgr zIl&4+TE6}}ZrD7Peypiu1V=_nn0xX7RrpJY$GZ zNRwcET2R|jc&i_#n#}FAlEAKA*?|m+;NK3XC1=0#0q~WX?2XObEFy-|BmJ|77Gu49g&I8{CCpiz_3%NH(~i3 znviQn3=~1~!#Iim67K&;EWycGct#w=6@N$b1H>X1;tefW5BU##{oCV@*TLB3$@s8; zEBp_@SU^eh;Alb8a!ZF^9_1OD`haGg#lT2SNXS4gqqqRC<0{P`ZGA!>2-IQyPXp0qZ7u217n zme(2=Z=bVkTpzt|lEDvg>u42Rne8&He|Iaz`r zGm^3Hd&bCRNHtu&5ig7R4ffh7=POUR551T%LbT#w*Ye5We_@};_7tnP_mebz{kZRXJs16ka{1w=v4k52{ox9p{!f*a9id$Sbv8%SIJ|~p_bk(sh;#k zY4F#J>}%<6LwxcI3@QSgahF9w=c4h+EM?dea2>u;=|=Um6Uzd-j_geV7l{kj{ciym ziuRCfrp0IG}<5^CXvKx4bObzf=|=AvQ7DK^=z&ok*{@ zX@4zZml=P|BVl$V#`K9jzV|7ShcAb(Fi@lDl?Zs2wX(I%nEE5v+Al-xHSp?H_x#Ve zhN7bZ(EycIqF4EX>mqM}q5~;|u)a%(T5k6Mr=ce;Yp1dTk+c!FddY@Z8+j2)iQN6VOZA%MhH785I0(R%} zrgf$a=@H&Kj#86S&DH&XkmphqiB3<$3 zyQiedT&62MKyq2)s_k!lE z`!Co7-O#8P>EC&n=HA2I%UVjLkix6Hi-Qckox;;Ahux;iN~qimdorX4D04f|QaimO zmN#$a>Fm|SEBCJ~LFM!QD=h9R9H)gWDtv~9M{P~+z2fS!XD!oGe1$;}1Qu-Ua{dsw zu12l-!LGix88ph`V+0k*DLOtfN_F(L3{i#LwzA43a@oqV#2+6O7??%;&}u9(+HlvX zr(+rK@nAKIAf>{<@(Z{bjUb)g}fh>s3@4QgG~@U3Nd@zsAsyyhZveG39%vdyjn(oecn>MOeg?HI@vRTG;Lf~M0w@Y?4h?97(4 z2MxE$4A<6etIfx?Gv4WSn+1{9TU{f>q-Y^i!%7*O%qy7iq|L$GAc8Xm`B<>;o=wxy zE98Eg)3$!t*I&+a?D2~&Miu6H6q^gBZ3sUcEF(YX_Dvf1Ny6RUEZv5yhU`m!=TY7= zZfH}34CtAMq%3s4$%VK-)UeQ6nH@(a0lc{5H*M|h<53_9Q%on8COVyRnLkavo*hRd z0mZDGoeBsHWp6St!xer)8+Pd_%p81$Q8 z2K!;4M&$g*c}JfhW-)%ukywa;-)7=&AGjbhlx2>QwfrcmHY4RReBo2Uf<&7=ER&+j z`&=wpXYBmc!0s_{pUiJC5Al;`H0geG=mgug5max)thK!>ed{%eT5emlk)qGrINgFB zm-5s@#tYx_o-0(-b~6%jmS@5`X*!*xm+`)RC4Cat~%toy#}>}ecW8vXIp*>I||`*BoU4WEfLDfrs7Jpwk5 zAt4L;RZD)&?@ybcI;ir9VWY;;C0)^bbwI|k<_`q=oV)M4L=1iV-!#d#^`27uAg-iv z;d9Q-CeGO_vY|h8@k#@cYE5eqUKw&hiz430y$YAW9f}NBRLdgW%x|7i(6Dvw*?BA4 zVNk&(u*Pf8cx&V8>R_#v?zfHL&%y1{P-t+DM~2M(7NFDFqq+0-cIL758OmnBQ!0JQ zoUoT4X;JxHfC+F$%}u2C1cUAHqh^2IyudVYyLV_w)K7?L(NPO3d#)shd$=LbqDAHv zr0`Z~aXiS~_B>!(2+D_nfJ~nM5md{I!5?4_G*evk&*$m6G&kP+gz-}Rb1`c|uH66` z=AOtFJC)oTrfnCk?mUA_>iAv}cT(P<-IM9+8$8mwWYUj&Qz$2h#X)t;7+c^Qwq8n( zY9jGc%4W>8gMw}%9>IEFjmrETDhb}_)mC9wlc|-q;pBq#=F(j?ZHm@M_lBFAiB=yk zqTzNGTMIOgDPQ`e%Bk*sT#U|qDByHc2KVq`=+tlBTC-6()dCMpw*{~Jt7@3ZhKwlb z9F-+&`yK*nbDJRZ$oJ(av+r9lD03Ip+y^1G1qpln-E(-iNbC$iw?{_loDO7AU9vN9 z@YP|j$#@5VH@DJ@3q2VvppSNP%{efg^crx)H85PcU-g^kr(cfmDYB)=pC~*X(AueD zhY(tAew^LT+v+rL=6MFb?w!ShZJ27aW1dJ%u!BvegLD0cRBD4v4pQ^k z)d*k1Jl)p=6Ax+`I_ps{eGLtSs=N+#QG4`6h8yDw41Bp_UqaMdizaz3p)t0w=LFfWV%hgAEsnnk~5)P}rE zm;CAAQDhF9h&?AT!m;(_aULz5%gF1usK$G{i*398;6Zcm`_Nfy5c;9W%6zd5ZPLSy zZyF<+z#>7B-!_*a*=7)+Nq!*y?}>-rEoOXleD8ox>Ig z_;7MKeJPC5#cF4|&GNj^VJm%P~hc1!{G^hZ5;sre-Yg)DU(ezGMzX&>L)I01723N@Z+5UiB84C%hGVhQpbB zFhCBl)*Pt_Y4%u?I#{2lw5d5#s$Huiy%UYE!q&cu(}b|20j_7HdC++xi)h@|=;P>< zO45V$N8}gUl21iDfzV$aK6|^w!Mn>>pt4qE56=Qq{-vp@&*`;5VJ`^UtS!0Dh6!~; zD#-KY=DfUzUSlFC;`?VtU;J?Oq-lf7m>O;+)sW`q*1g6|AoY;5jHw?I)XqFw&_cy6 ziztD!JyL-_9{VRs7gAeKl4ZHujn^w-c>`@#5;w)YTaBb3TZZRXL;mJ7L+==^g~{+X3;SNEeBauPs9A- zX{A$3>#jg(>ZZooC1<_6@wCGLp9cx^dc@`4_-eGttD(4E(Zk2HfLRG!+X_>0HsVdpCMy?B5i{;}a>H}JL*sF@Ha5?AIC zp6;dT#ETa12Eq}x1ge*tP$ILi;&aLJ6-7&QY~@>)f??)Ypq@Lr?zytqR`R)O0Ra9ibh`E z2Ot`JUjP}-FF+J>@GF%pzW3`&t%TocSh@Rk3}q0PF!olgq=Iey6V?**fXpFk0K<7g zN4)npcKGFq=nd=Q|V+XMP$ zk(zpa6<`Cn zIsvTOY%?|TCa{Gs^}y*Q5#1ajeM#|0X<4-;v55{{wX$DUiluATj@dJW99ri+J8;GQ zqx@op18Q_Zmu0a;E3&%~W&AeBnB`pMAcL8c5p}B^*} z+haQ~iEhMyxn<^p zN%c?esV(u3eVyS1lVj{_CEGIB`Z=NaY4$xc)l<2(y^EB(7+lWu;={aW+|RP6TREY= zdx3t0dTIpg*{rvqVV&|hJT^*r`J*yR=@uh^G{MT+h!SF+s+{Tmofr?B7oH` zV8o9dZMBv;`n20)@%1d;KIm+wgNT3p*~^)@N>Y1in6g9@uWy0q+k~DSoU`?{-*>#+ zaJf<3c_X770UV<*Qx5AP+Cr413T~6aR%`tLeShwi`Ku{Grwr1e5#7EzhZ^L``_bB| zVLkm^im&_Y3`|dFhB_)j4{2WR@Iq@*-8tZgw~!rwD#acL|Z z(uQ&v1que}U=loyU^g?REOR(x!DR73V&zDs~x|`yAEoo`nq{lLIA&z z`oee%w;{a)2$jHP3=533t0BMzk#@DEc|Wx!3w4`cA?&eygeI|-_+H}UyI*)3sKF~W z#B~8j*~{LM-JddC+ON4T^059YU0A(M|7P>Gh2vPXPfwgW{1+E^V{p{2Y}H1`=BULi zU~65UgJUTU4o1QBl#r#h7GBf+1LdVzqfOsw7Z1Iblx&-tMWz{+zAJg7WfUvUb?z@( zey&P0y(%{Gy)=wNO`TeW7GGna+5BCC>1URRY`ftD19wt4QfStfwAf}kP-6)L3UB5l$itBbnfOfK0yFV04~8h%l6aV|55 z-fb@ywIx3qt1oykBt7=|Izad|#CZM*znRFAPaKy~z{#U+mFUdVwU?1ukJQdj2%BxP zpi@`ym$DCjf)+MIy*9sFII0*|$2XqO9bB(o;i(Hky`<05)&rdxORt;iELKbmPmUe) zN0n6w=^a#2?+SH*E%w;qei8NZKNqeH;&vcbELU5V{Q=J>uGJNmKNfxcIc?YfOKGwP zV)y0Z@eTCsF?za7R8B0<`5tn>h@pZ`=$eUc_+QzxnWC~1-gv95ok9qFF~{zMt}_fR zy@sA{v!OG!-c0&Xv)2f2^H3TcapdLwlj)Y*WyfR|eHw@XN*GUK@E-R?he^}w(DtB0 zu|Fiv&o;}s1GBq0(P-}ZCs-(l%F4BIVI_j|UP1-j9CKb#M+|NTD#KA*`o-4xIe6U{Txwzn*l8v%Ppe&D9vL3IwN%sG`huax=q z6Doa{$fe`o+M-Yi@$+?l(Dzn5yJwAB;A8UrFITGaq#4d;Q7llRd3?g({<3L=jxS@w;#P6 z@<;TF0(lKWzd?|qg0+<2?bC^PTJQ?Hz5BMH@5DqDaW>dR zZ{y55y_mhe*s@^Xt>|y`+fTzEziJjf&`=riXs@wC|9WQZ;C5xxV?cJ@XwwD zs?9pa_K<3wch5Bp?yINY) z;iHA<&H2cA#XCfpzu}=@f$SQo_CbuNCxY~C_zWSva9rKnk57Q_|B5Y}yA7t@guG{X zfF7jwq}Hy)*z(OvZ=53gBxHDM^zve{KEl*DzIx9t80SUGU83S+AGRM4vBP-F!+^O@ zB7nJQX)c`=Q|PHevyY37#_;8KT~K&`@haJ0ri=|^$}Y74)fE_1hMyfgLN@kI2cJ2q zaALvREuSj?7k_Jx?qQ!HfxvBg4{j*#)GFIg=beHpRU(=VN+sQl6N$4_2Mw!f`Rn7= z^uUavV%-jZ5vXfoPv~nyCK;}v7fufuQdX*HJ^H&3uF2a56s+g6qMF-B%)Z&pp4yZo ziyW`+h|AH_5P{{&Tm*Fkp&r9#7|?x%xzFty{9|dIRxz)rh&_g7pGrBmT+g|$)@|3P zmhBqtH;M)?r&Hp1zWWZ5p$-wztThB3&-7|(IV_eZ+P{p@kTT-^EIw`ZV)yYI$7~}| z0G$x$N-pAA7Lf8RKgX-%@Ciy#34S!-9>te#^OMT-<2GcyEw7IOZN?U3GF{&Usn$%2 zNN)_ccJX^%>Y_Zr7_VV}*3(YZUd^M)Z#+eme$ZytdOU94C7!bs#b2`m9Zm1w92C~9 zRYRNIq+JzNYqfh#=`S0L0O@EDv*_|BkK(}wcD??MkTQy^&2%e(_7Hws2HDbXk6ptvjghx98*1 zS0dlexYXwP5ugl3>^3D|%B?PGU8Bp}cm0~s-O>V=Ujz|pDm{`QKD?W_$}s3^(Om-FBJPdy`w# zNLN&9d_T{bL6QsIr^&-}4?dYX(Byu>)PrpVeeq&cu=(h~c4TEjDWu>cEftJ3>yIkh z!~x9lJj;T$G7V0nlQXD>e>IYSOYOFkVODt?9#@D=k#KjjkRmrvy)|n3LEcz*LuZh< zlu*wMJug{G%2M}i7MZz#8yQ|45j~TB|H;IEUnoQB*Q1JtN}5*3O^m4m7U1(fm=scj;YIOEAY`}(lN9B(z?k>Su&aTNM7xPC>eyo z<(PR%G%S2`PIdf161H8Bu--B|TtAgeTle3}r*r4ghxJ?loQtJyc3Ae=vxc%?BF65- zrS~h~G6))hukSp&59xEcLGYhf4`O@X0e7d1gS+<+qL#&w-NUp&}-pIv43tSsp;$JU@n zgA#8WPZvCw!Ew7dd^n`1_JmHEs#q`7&X>=Yy`Y0eqyUq9O?f4YRvUkTcO*yQ;Z^EL z(9{=eLUHp`m)?FZsIMYuyC!0|o@lnSRmJRfW>fRIq$#L;k|D5trRsZkBv04wwVna? zZEY7>qlX#xsgg$Ld*Mqd!?^sy^rp}_qYwr!TD&hy(+$&u3^%R1H=1FQmaN?IfnQDP z?BTwS(9qzNy4ng$}kD}>ltl_DZaP+I=tY#8k)@+6!`U~zHAcmSN=bH{%ap=ab zz_A^~j?){pWk?J-TX6vR>V{5Br=SdH5O%Lb(bBueDZ6c{h(ZE**`?{|`tm>QGw6@2 z8AMYZ@yFGS3WiJqe(^~XRu*n;NlYtV;DW{0J3q1Su z&`nJR<(aCEROW(^l_(w50?iq0z$O0p0MW2iscuSPe;tuO7cc98*<8>RR1llg(|ec0 zSa{-RRyRZlf(0kLfSiiooN&Rk&1+JyhE+I_Ban>k0pA~ zSJ(LUZ@PaS^qoxXss8=x0Nr+Sguz}xi@6EIXe&aT2yM7;#AKIz^z-<4xyI=TpRpvN zJiR8n)u5^hsu-Ry?~Al?PwPS!ox+F9WHQ1&eDybZ#>%DYWLbLko6v6={)~t~W~cUx zBrHOab%M?c{VcLivU1lu%F4)X_#}H@KzX3K*F5cZfkO*C!hg5ym|P>xr8&G2998BQ z_aZ=wffC90?dtu6Ng4VAh$?`JNCdPyh&}0z9BTx)6mFLR5}b^^`;xhqghS(~FCBy2 z%fonLd^8VVyr0CRUHrxk3z1~T}(=lPE=eybuO=hlJ^_GWvZ=q{*)>Idic zg;fT;v#$pfniaSK&+Kdu&&#;)@~a*JG5fg>RcN3B$HzzB--f$rjnCp+K}AgJ4J-jsU* z=dv3Cz}g0^ia*2q83o1He#hG zRK|`l2oplfOYzNub}B2CZ2{N#E`xZm_5wHAdS(P^4uZtdw~* zA_GbxticyO$bAg)HC)%u!*h+P+Gy<;*suCXG^b71TvGYabeZecs!_wtBhU^Vb`>f* zt1@DA-$w@|5xKtT4U>gI#!Mq;k;cloz_q-UL%5mtwfkY*@WHKV(*P6ux)FY0^z<~p ztG;J@m#L;S_+2`?`pdV_?dP|uIhN9bj3m|tRXJ7 z+q7ZyP!*#7%q~QPJIJ6_b-ksTG1)eUi6+QbwOHu(LlrpC{=<;JuMc~4MeY;t44q5> z$?0X-y{gaqPv*PrUcq*yO=)a6=T}~yEDo?6SM4$5ex^xX2xe=r-<|2F_-m2G`Ljrd zD88fkv$;WjCpH+9^P%q1`)KKSGwDm%AlXaWw(tg3?>*^Nq5FQ9AW}CX@0B9N5!zg+ znw}bsi4zX5wn~B3Z+l&#CaN!S*J7iB=LNN=d$TK~pc2OqLi9MqN|X0Ud9Ew&a4cQH zRp~}5=eO&Nw9YlmLZ)fvy9ajavrif>`gNto>Z_BZ{X9)2%FJ#&U@ClM{@g#V1SL-t zWWq<+UWw%OQI!?1uA~7NiTYBx3p6WuFpSy zUB(Sj&-P5=Zazr)RN1YnmGvzXKvUK#fokl7G^|8k#Hx-j9!#{jYVh3b8a16qa)_B2 zeQP_hFv!Q^o`OR7J@tYLa{n@E!NG)$J7Ch_4S#cZ|OA~8Law%{D2HFHAt=HV>Q z#>=k(#D7wPIwhsnA0aUs4zq2 zw529FUXQc&dW0KKMawP|?wLRys%c7FAIcq%mg2JYIbWQtPedsM>eZg=iG(y%VvU3N zuOeE0?l}_uGj!#^gs!IzqyXi=Lf12+jxV{!=Kf~vR}WrLOKGP{`7B8h^3{K#m?Pi7 zrrD5yaS{hKFu4vF<^B)`ZKj_2K~)0{@a*;*%w{gG3ZqD}>&L2K>W0EH7n7R@9WG`f zp^=TJZFggOH@#z&SYDjG`jKmP`mW%l#XK~P_Z-44HKP5k?OSUaY~k8Cqgu;lVOyVr zZOr>o(c*Qv#4*Opx&dka#|K+dP#FdJJo2g*0Elo#?q;@_$Yt)tm^I>%BS2D z39s2I$^-5`xh;q?t1!FsOX8#GSb|J>TtjlS?iX?H0A+tKb2XESE|ogzAH%k1$~jk& z(pskUZ%RH68hss9Z!!kk92%%p#NQW>64M)*U(bY$-qWriv%|lRUbcE)xPudp_BXi8RrQM3 zJcBa}Egxzubdpx$E;3M4#_)XL*DjS|ATr1*JiIMOw;gTHx462Qm$PMn3D}pug?$wg z4S!g+Gf_anyN|)7$yV*Xo77#`Gkv}Ku1FlhESI>SghAb5oY_#XT)V8qLK@gz?3Yta zGYO`joD~_1J0NnZJxp~$679t34|x+V%|DUrnMSkZ(?O3lBk!f%T}zgQGS{N@p@nqm zE;`R5fs*Nvw>F5Q02)yYR<~_K^+Y3Nt$@WPEPd+8G2eS=!#|AJ=Bl@cGp!)Sc%7SVo==B+;qs!#VP~!NIE?)Ve4(wkezE4sizoU| zm@Cn=tx&t>3qxr9LV%v<>f#}U6pT7-Zm2QwgcWza6w69c!T3q6V|JL+csqh>-5)W> zUXQ4;L3**94@6w%xP2BcBczVwpF_geei|m*?2D==jf4CP=R|Wf<0?Fy=ozbhY6DOQ zx{9njM@)!x+3SdaB?R#(yn!f0#a7DlBTF-rrERmKpX)x3d+OW)Rw4*?ePEIy@hFW? z41F%<+!L9bI9{2%NX3$Bf&nQ+(wtYZznF?Q={~*Y1ljR#f&Lr4iU&Wwh8HO9Hof7c zMLoLvOGcJJtbVjoy{$7;@AOM0XRO0zCPmctRdqG^hWoQm9CypR0NaK3*fs^|4`tcnx!AEI;tJqQyc? z^W<%kz`x297_}WAJK}Ep6M{4rBqFcROX85u8WgzpI}4}%;30h4fJc7!8D3@E#YaXh zL{tpHKm1Q*r0nPzXp(C#(6W6QT&Ed$y6Op-Lm6yQ{OK8<*iH=<4~KWFSl+a`SsOg# zZIX+-+BQ9pH)oPFC>F`Q{Bcsy3D_qdY%R0QC^>)n+`%NZ^)~TxRlXNNGv&IZF|%R2 z)+RFVWSRR`eY9bK$-RrJv&K3wYe?GWlPbNiTo0XyNxRtfQ}GGXD-FEqP8ZC=FY;it zp2$}1>Q*8Q#91&`SNx%Ysw*|5Wykq!Ty*UuBP<8cD7t!z?n;I27lcN}K1;93R#O6{ zfubLdE;J;(c@H<(QTf#`5g?Zb$}U6yzBo(cwL^n7YdntC4JEO64!bP{sCg~oGJV6d z1Lp4`YYCm{DMvx7X^eT0+zq6f+UeoY7vdMPTUz?EoY$78jm|P$&2GC6b5ARQTn~wA z5vL|B>9dzWQUl%5YGYlyN%z0Jyo(2ajyV+-8E9abPmft<13IBSi33~VK< zY#kNJ(_Jqe8oOThSLT{h*#`#JigP=H$=yeg?=}|XD=aG&A5cYR1$j2jho{RT2!!tC z<+qbZBxUV}#~#FR1@Xy3qS+Uz^lKlTsz53n7YNecAcs-Nv`+5&ldjnYCV5={^l?yfknz=B zT)?p4n71_F#U1YOQCdrUwl~}DB=3Cm)+m~G@TvM^?c$Q)4Q7dnvVO3%_SJ*faMMTj z3p+&v6W6(76_THR&K&KX3)~qUR2#))a-cUe-$M6G$QYD!-9e0{fljHPTD@wkTMki7 z#yXKIXZaAo`KC-D@h2Joo7bOy&t^R9TwU*DANdZnp5i&}YpRswfm2;CyVqqM`oRes z_`?L9ts?pWnE5(McN)BmGwc#eER^Fu^h=$`9{!j?Ft-^GwuFlOfkYP(<+X4|UeY(N z0IB+SkUyN{apude2HzOI+cn4h1nQIyO}w>6b&vVn>Uh4@HxAtB4(1e)>=5pL*;rhK z?wE7Fh?p1aVk0Ywy`!-Dg%SG4!)+^AXm0>(pG-4p*1jkn4w|AM8GAGOkFA`CfAXJ- zlGSN{;_FyBgzxOZFL5)jGAUH))wFupl2Lpwwi8lzv@_8J$#MkA1F1MmX|mX^8C==6 zDyxmODsP%;>Ab*9i8j7)+irL2_V4xIg$^rUku(@?GCHfIbB7b)1-+OYvb;srn;euQ z@gLg)cNBrPqctaZ1f`x|Y)a(irHg=~VrJ8_y?{ZWH6TX)@lmz%_8v>9ZY~J@snL|J zj3I+>N?zBf1j`;FvUqMPLscF)J-;xbo~FkMAUeIfSMRIWQ~3p+n_}m3UT?D3oZ2J8 zAgZeM#CRo;i2$lHCY|z#w}>$@+ETR`k?Y zHJ@cy8}~MyOMYMI|5#DpirCE6wYdjAqEoYAlfqx-ION>Lk<=#lId7J*CbR0uS!}PY zwE@mH$CFIdXrnK7^$~47TH>pr+K5gE-VQ}N#&PCR-s>=v1dzxUh=KWG>;(7YjJKB| zCN&!_2YF~Y&{NyPO#QXEbbw8trP9C`JdQr)(_ZqgrMIqOCRH1{8ME@Rh>D7VhhxPJ zG70dSL;;joi9rcCImm5gm(kq;)ZmC+zI+-;1zK8YVjF)-vv^_P{c{kZVouM;QoBTN z-6c=le-t@M`Lo#$+!oNi5GZSze0g3eDQjok3O`Tq$r39gDl1lyF9+YEN)Ad>`uopF zBx^d)1M0Zn=)z4<`4iq!4xjA=zS*rw`zpe5VMIar?-A1k42i~$43wX~1RN-wO!q~$ zyc4jVCyf&kJeW~@z6na-IW;J5?g?EFaAdfLWDcH^ufWoah~Yd_)@2|O`0ZHyHh}Tg zBFk|e&Ked+%fg{XyL~3+%rIV9R-&oO%-!<7lkEGq1WVpB`}(CV;*+1X7!|E~?!NZf zv}E+D?#U*-!>V$}Kf<)@KVjO9$h(Js!Zfas*V@)FI>9zRH}Ppv z&DtlF;?C)J^la6TOYqdgR!wx~ZLo<;?ZER|y?&KJuK*DydrMxPqm1_TeP~zx$m7-0~?NXb3^;c?|R7;XYT_b^OwmJawRQSc0>oZFCpzUNTq#jMTp*NME!}n03EOw?KSCNdpk`)yHnd zv<CX41<8}4zR&^7g8=c6l zt*!Tr6E^ncww*v1(zMiu*Th+BZPmRiXS&*%T=kbX^l~UssaC566#L0!`}!^B$RN;# zrn_VGonSz=zh_Totbol8^{|p~Et#JwU*GTY_;qWcEGc9O#ij5Q;jHZ)na%B5l6<#N zb_$Uqo+P^;%`OF9%^G?0wZb{({u}TFb+Euf@8|=u%*&Bu+P>Sa$3M**i=XGo=A`Gv z$YrS*OGPCAT3FJ{^3Q8==0tmyoMiy$=8HC_uk%pNE4LCcyPl=@nuYORGbzu}@kkE?|ng{{uAVmmG zAv8e{DH3|Gp@bqBMQZ3xnt&(*p(&jJAyny2iULXtO+*lBB3)@;SnKR>?{m*S`;PnL zjxoplk&(kQd2xl6SVKLToX&wXWsf%^}Tq8w=IC)7a!Y^lG^MwD1eF&osW$D8lU3qc%b3I3KYmAN#7P zEBe=jhm*o><~bxpw^5VH7A7g%3@y4jb26qM6hF9gB7e#39@Uxg@;J%z7@{6miRldw z(R})HxOGrMTgKhz9ju9m)I9y|WSG6H8NnK8t3=I}sf#x}`S2-2U92gBZPNOsv}eqa zg7k65yUpzEov@jQBH4Gp&$n0URxHg1UJ=!Gk(&{HP7bJ;QFeFEg~Mol+t!D($NjS# z4m<0*g}V55H+jcIbxr{xMYZ=8oSIr1j;^!09zOqiW1^Kd{-eeD@4K23ohM{NndJe2 zMMDkBik5_6keB~_z>IcPJ!2O+U!SJ1NS*x0?@tZnTlRf2zFX}ow*|bg4*z02okX$K zGR)V|l}{&1YIdR@WGf}y+{cQwe?5+)GJc~hh{&PAH<>kVS?!4ZezW55w)yeHuam}~ zuJXGS%-r{M<t7s2PuZ{{7lh zIQX3>ORAs1lEBETGm>+u@6?U!aSk{zD+B1!<2jsR@JULg<#)Ws?uXm6UKqZVN?Eq~S3zj?d|&ZuP&b&C`+O&h3N%sZC6g}dw5dj9zg z!~->H;(?ZJ67F8Ho4QAC^W22@h_>OISI6S*+!^}J%{#ibc*6enLjBa2a)Ydr|LRo9ln@Qf7Y&Zhrf^RxQ=9S*)whzC5g4nXWO2e^UO{vzhaT*&BH>4=XF4C-;Mn z>JOJ$9#@9v+FMcjX4SWB_;zGbky4rP*ybJoM${$As?A#vtDP(h7&AVqqHTsP&9Pyz2C*OzKo(?x%R*$JRRQ%JcUMS?8w1 zwH*&+YyI{){CA6vDu!RHuN3#HisihkKR+IwJe}jNssGpM&n0j z7f^%x@PS!*fx)&A2llY^wcMhC+~2p`%!!H3W18$q70!ZB@B1D;-~cj4x<+bw{M>sP zCoL;_OY>~Ma}E3k&~!ii)HbU zKh2`2{T~gR${wvZx(`}k%3hHBVcSreUe9h^{-BpSRV_M$RqX@sXiOl!z}mQK;YHtV zr}W<6Xda2j?D>6M@-XdJ9E+~?s&|+)9A~1N9e*4L_U<`m-BVRRnvMY}1J=@-OrRAr zH$NdZDxfEJI6USqU5aB!k&0t5DO29sX5TDviF`DB^7GxTpJH?5Pjn^vuX%8S zH7?p1kJE{5jHhu~zmwF@imOVjmcU&qT0G7